如何将内存分配给C中结构中的char指针?

时间:2015-05-23 05:04:19

标签: c memory struct malloc allocation

我在下面使用这种结构,但如果我想从一个巨大的文件中获取所有字符串,它会受到限制......

typedef struct arr {
    char name[200]; // Could be a number higher than 200 here...
} array;

现在,如果我使用......

typedef struct arr {
    char *name;
} array;

那么,是否可以为struct(array)中的char指针(* name)分配内存?

我不知道自己做错了什么,我为数组分配了内存,但不知怎的,我得到了一个Segmentation fault错误。 name[200]的结构没有给我任何错误。带有*name的结构。

array *str = malloc(sizeof(*str));

我是否错过了分配别的东西?

3 个答案:

答案 0 :(得分:3)

  

我是否错过了分配别的东西?

是。您为array内的name分配了内存,但未分配array内的array *str = malloc(sizeof(array)); if ( str == NULL ) { // Deal with the error } str->name = malloc(200); 内存。

你需要:

/sdcard/comics/

答案 1 :(得分:0)

当您明确编码所需的内存量时,您的第一个分配方法会为内存区域分配200个字符。您的第二个分配方法只会为组成指针分配空间。因此,首先分配结构,然后明确地为组成指针分配空间。

array *str = (array*)malloc(sizeof(array));
int n = 200;
str->name = (char*)malloc(sizeof(char)*n);

答案 2 :(得分:0)

是的,您可以将内存分配给结构内的char指针

array *str = (array *)malloc(sizeof(array));
if ( str == NULL )
{
   printf("Memory allocation failed \n")
   exit (0);
}
str->name = (char*)malloc(sizeof(char)*200);
if (str->name)
{
   printf("Memory allocation failed \n")
   exit (0);
}
...
//use free() to destroy the memory allocated after use.
free(str->name);   //first destroy the memory for the variable inside the structure
free(str);  //destroy the memory allocated to the object.

比使用指针'* str'和'* name'后使用'free()'来破坏动态分配的内存。首先释放'* name'而不是'* str'。