gpt4 book ai didi

c - 释放指针会使我的程序崩溃

转载 作者:行者123 更新时间:2023-12-01 13:39:58 25 4
gpt4 key购买 nike

我在指针方面遇到了一些麻烦。

这是他们的声明(主要):

int *dot_positions = (int *)malloc(sizeof(int));
char *str = (char *)malloc((MAX_N + 1) * sizeof(char));

其中 MAX_N 为 100,是字符串的极限。 点位置[0] = -1;

我向“dot_position”的第一个位置添加一个值,然后在运行时调用以下函数以添加其他值。

int add_dot_to_array(int *array, int position, int array_len) {
array = (int *)realloc(array, array_len + 1);
array[array_len] = position;
return array_len + 1;
}

在 main() 的末尾,我释放了指针:

free(str); 
free(dot_positions);

但这会导致我的程序崩溃。我在 Windows x64 机器上使用 Orwell Dev-C++ 和 Mingw。我也确定那些指针不是 NULL。怎么了?提前致谢!

最佳答案

您正在丢失 realloc() 返回的地址,因为您没有在调用者的环境中重新设置指针。这会导致该指针(来自原始 malloc())变得陈旧,并且释放它会崩溃。

要解决此问题,请将其设为 add_dot_to_array(int **array, int position, int array_len) 以便您可以更改调用者的指针。还要确保在每次 添加时不要realloc(),因为这会降低性能。

此外,don't cast the return value of malloc() in C ,并且不要通过 sizeof (char)“缩放”字符串分配。

关于c - 释放指针会使我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19588690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com