我不认为我完全理解 realloc,有人可以向我解释为什么我的代码中的 realloc 有时会失败但有时不会

I don't think I fully understand realloc, can someone explain to me why a realloc in my code sometimes fails but sometimes doesn't

我正在为这个较大的程序用 C 语言编写一个非常简单的列表数据类型(它非常低效,但它可以工作)但是根据我使用代码的方式,我有时会遇到分段错误但是如果我的输入数据稍微不同的代码很好。

违规的部分是这样的:

struct Vec {
        int size;
        Node* ptr;
};

void push_to_vec(struct Vec* root, Node to_push) {
        root -> size ++;
        root -> ptr = realloc(root -> ptr, root -> size);
        root -> ptr[root -> size - 1] = to_push;
}

我尝试使用 print stamens 调试此代码,然后使用 lldb,似乎 push_to_vec 函数中的 realloc 调用是失败的行。

如有任何帮助,我们将不胜感激,并在此先致谢。

您分配的资源不足 space。

realloc 的第二个参数是要分配的 字节 大小,而不是数组元素的数量。结果,您正在编写已分配内存调用 undefined behavior

您需要将元素数量乘以元素大小。

root->ptr = realloc(root->ptr, root->size * sizeof(*root->ptr));