【发布时间】:2020-11-29 11:20:07
【问题描述】:
所以这是一个简单的代码。我不会进一步解释。我的问题是,如果我使用 free() 它会导致
*** `./main' 中的错误:free():无效指针:0x00007ffee58389f8 *** 错误,
但我不完全明白为什么。是因为我给了ptr一个循环变量地址吗?如果我删除 free() 函数调用,它会完美运行,但我很好奇是什么原因造成的。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
printf("Give me a number:\n");
scanf("%d", &num);
int *ptr = malloc(sizeof(int) * num);
for (int i = 0; i < num; ++i)
{
ptr = &i;
printf("%d\n", *ptr);
}
free(ptr);
return 0;
}
【问题讨论】:
-
ptr = &i;您已将ptr更改为指向i。i变量不是堆(动态)内存,因此无法释放。你到底打算在那里做什么? -
只是玩弄指针,没什么特别的。谢谢回答。 :)
-
好的,但即使从逻辑上讲也没有意义。这就像在做
a = 1; a = 2;。显然,第一个值会因用第二个值覆盖而丢失。在这种情况下,丢失的是malloc值,因此无法释放它。 -
是的,我知道,只是尝试一下