c - 段错误/可变大小对象可能未初始化错误 C

标签 c arrays segmentation-fault

我正在尝试使用 iNode 数组(我制作的结构):

 typedef struct iNode
{
    int id;
    int size;
    int pointers[NUM_POINTERS];
} iNode;

我得到segmentation fault在此代码中:

for (int k = 0; k < NUM_POINTERS-1; k++) {
            root->pointers[k+1] = k+2;
            iNode *inodes[maxiNodePerBlock];


            for (int i = 0 ; i<maxiNodePerBlock; i++) {
                iNode *tmp = malloc(sizeof(iNode));
                tmp->id = -1;
                tmp->size = -1;
                for (int j= 0; j< NUM_POINTERS; j++) {
                    tmp->pointers[j] = -1;
                }
                strcpy(inodes[i], tmp);
                free(tmp);
            }
            write_blocks(k+1, 1, inodes);
        }

关于strcpy(inodes[i], tmp);线。 所以我尝试初始化它:

iNode *inodes[maxiNodePerBlock] = malloc(sizeof(iNode)*maxiNodePerBlock);

但随后我收到错误:variable-sized object may not be initialized

有什么建议吗?

最佳答案

 strcpy(inodes[i], tmp);

当您到达上述行时,没有为 inodes[i] 分配内存。 您可以直接为inodes[i]分配内存,而不是使用tmp

for (int i = 0 ; i<maxiNodePerBlock; i++) {
            inodes[i] = malloc(sizeof(iNode));
            inodes[i]->id = -1;
            inodes[i]->size = -1;
            for (int j= 0; j< NUM_POINTERS; j++) {
                inodes[i]->pointers[j] = -1;
            }

关于c - 段错误/可变大小对象可能未初始化错误 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43298615/

相关文章:

c - 更改大页分配的大小时由于initialize()函数导致的段错误

比较整个数组行中的一组变量

c - FFTW Segfault(可能很简单的答案)

c - 如果文件存在则搜索目录数组

稀疏随机填充数组的 Pythonic 方法?

arrays - VBA创建一个包含公式的数组

Linux:处理段错误并获取核心转储

c - 多线程程序在完成之前卡住

javascript - 从包含对象的嵌套数组的数组创建新对象

c - 使用指针的 C 代码中的段错误(核心转储)