我有一个看起来像这样的结构:
typedef struct TestCase TestCase;
typedef struct TestCase {
char * userName;
TestCase *c[]; // flexible array member
} TestCase;
Run Code Online (Sandbox Code Playgroud)
在另一个文件中我试图将灵活的数组成员设置为NULL,但这似乎不起作用(我不允许更改它的定义方式)
void readIn(FILE * file, TestCase ** t) {
*t = malloc(sizeof(TestCase));
(*t)->c = NULL; //gives the error
}
Run Code Online (Sandbox Code Playgroud)
我正在使用双指针,因为这是我指定的(这不是整个代码,只是一个片段).(因为稍后还有代码来释放分配的变量).
任何帮助将不胜感激.
看看这一行:
(*t)->c = NULL;
Run Code Online (Sandbox Code Playgroud)
这会尝试分配NULL给一个不允许的数组.这就像写这样的东西:
int array[137];
array = NULL; // Not allowed
Run Code Online (Sandbox Code Playgroud)
当你有一个灵活的数组成员时,目的是当你malloc为对象存储时,你需要为数组元素腾出空间.例如,这段代码
*t = malloc(sizeof(TestCase) + numArrayElems * sizeof(TestCase*));
Run Code Online (Sandbox Code Playgroud)
将分配一个TestCase具有numArrayElems指针数组的new .
如果您事先并不知道需要多少指针,那么您可能应该避免使用灵活的数组成员并只使用普通指针.