我有一个这样的结构:
typedef struct TestCase TestCase;
typedef struct TestCase {
char * userName;
TestCase *c[]; // flexible array member
} TestCase;
在另一个文件中,我试图将灵活数组成员设置为NULL,但这似乎不起作用(我不允许更改它是如何定义的)。
void readIn(FILE * file, TestCase ** t) {
*t = malloc(sizeof(TestCase));
(*t)->c = NULL; //gives the error
}
我使用双指针是因为这是为我指定的(这不是整个代码,只是一个snipit)。(因为后面还有代码来释放分配的变量)。
任何帮助都将不胜感激。
最佳答案
看看这一行:
(*t)->c = NULL;
这会尝试将
NULL
分配给数组,这是不允许的。就像这样写:int array[137];
array = NULL; // Not allowed
当你有一个灵活的数组成员时,你的意图是当你为这个对象输入内存时,你需要重新分配你需要的内存,为数组元素腾出空间。例如,此代码
*t = malloc(sizeof(TestCase) + numArrayElems * sizeof(TestCase*));
将分配一个新的
malloc
指针数组。如果你事先不知道需要多少指针,那么你可能应该远离使用灵活的数组成员,只使用普通指针。
关于c - 在C中访问灵活数组成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34822407/