Jump to content
Cr4zYPT

Alocar Memoria

Recommended Posts

Cr4zYPT

Boas Tardes,

Eu tenho esta struct.

typedef struct
{
int tamanho;
char** elementos;
} vector;

Qual e o codigo para alocar memoria para esta struct, isto e criar um novo vector com tamanho variavel neste caso pode ser 50;

Share this post


Link to post
Share on other sites
Diutsu

vector.tamanho = 50;

vector.elementos = (char**) (malloc(sizeof(char*)*vector.tamanho));

Ficas assim com espaço para guardares 50 char* (vectores de char's)


XX SINFO - Semana Informática

Share this post


Link to post
Share on other sites
Localhost

@Diutsu: vector.elementos = new (char**) (malloc(sizeof(char*)*vector.tamanho)); ?  😲


here since 2009

Share this post


Link to post
Share on other sites
Diutsu

segundo o que eu percebi ele quer usar a estrutura como um vector. Ou seja quer guardar elementos dentro da estrutura. O que eu fiz foi arranjar espaço para guardar esses elementos.

Não sei onde está a tua confusão.


XX SINFO - Semana Informática

Share this post


Link to post
Share on other sites
daj

Diutsu, a confusão está do teu lado, que fazes uma mistura de C com C++ no exemplo dado.

Já agora, porquê este padrão

malloc(sizeof(char*)*vector.tamanho)

em vez de

calloc(vector.tamanho, sizeof(char*))

Informação sobre o calloc: http://pubs.opengroup.org/onlinepubs/9699919799/functions/calloc.html

Da página de manual do OpenBSD,

The calloc() function allocates space for an array of nmemb objects, each of whose size is size.  The space is initialized to zero.  The use of calloc() is strongly encouraged when allocating multiple sized objects in order to avoid possible integer overflows.

De notar que, em ambos os casos, fica apenas atribuído espaço para 50 apontadores. Cada um deles depois terá que ser iniciado com alguma coisa.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.