我不认为我完全理解 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));
我正在为这个较大的程序用 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));