【问题标题】:Accessing a Flexible array Member in C在 C 中访问灵活数组成员
【发布时间】:2016-01-16 01:06:59
【问题描述】:

我有一个看起来像这样的结构:

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

}

我使用双指针,因为这是为我指定的(这不是整个代码,而只是一个片段)。 (因为后面还有代码可以释放分配的变量)。

任何帮助将不胜感激。

【问题讨论】:

  • 你得到什么错误?
  • “灵活数组成员的使用无效”
  • 请注意,您需要知道有多少条目以某种方式分配给 FAM。我想您可以分配一个额外的指针并将其标记为空,但是当您分配基本结构时,您必须为c 测试用例指针分配空间。这是让它发挥作用的唯一方法。
  • SO 28718198 是相关的(可能值得一读),但它不是这个的副本。

标签: c arrays struct


【解决方案1】:

看看这一行:

 (*t)->c = NULL;

这试图将NULL 分配给一个数组,这是不允许的。这就像写这样的东西:

int array[137];
array = NULL; // Not allowed

当你有一个灵活的数组成员时,意图是当你为对象malloc 内存时,你过度分配了你需要为数组元素腾出空间的内存。比如这段代码

*t = malloc(sizeof(TestCase) + numArrayElems * sizeof(TestCase*));

将分配一个新的TestCase,其中包含numArrayElems 指针数组。

如果您事先不知道需要多少个指针,那么您可能应该放弃使用灵活的数组成员,而只使用普通指针。

【讨论】:

    猜你喜欢
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多