我有一个这样的结构:

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/

10-11 19:28