为了了解更多关于指针的信息,我只写了一个简单的测试函数,它创建一个指针,在 shell 上的一些输出之后分配空间,并且应该释放空间。
void main() {
int *p = (int*) malloc(sizeof(int));
int a = 42;
printf("p: %x\n", p);
printf("*p: %d\n", *p);
printf("a: %s\n", a);
printf("&a: %x\n", &a);
p = &a;
printf("p: %x\n", p);
printf("*p: %x\n", *p);
//Until now everything works as expected
free(p); //ERROR
// printf("p: %x\n", p); // Shall cause error, because space was freed
// printf("*p: %x\n", *p); // Shall cause error, because space was freed
}
起初运行一切正常。free(p) 没有导致错误。然后我用一个结构尝试了同样的测试,得到了双重释放错误。“好吧,也许我做错了什么,让我们开始吧”,我想,然后按 Ctrl+Z 把上面的所有内容都移到上面,就像以前一样。现在我仍然得到这个错误。为什么?这是一个新手问题,我知道。上面的代码在网络上随处可见,作为 malloc 和 free 的简单演示。喜欢这里:http ://www.cplusplus.com/reference/cstdlib/free/ 希望,有人可以告诉我我做错了什么。