已关闭,该问题需要details or clarity,目前不接受回答。
**想要改进此问题?**通过editing this post添加详细信息并澄清问题。
昨天关门了。
Improve this question
尝试编写一个程序,根据从用户那里收到的数量动态分配内存,并在不释放内存的情况下结束运行。
#include <stdio.h>
#include <stdlib.h>
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
int main(void)
{
int num = (int)malloc(sizeof(int));
free(num);
scanf("%d",&num);
printf("Leaks: %d", _CrtDumpMemoryLeaks());
getchar();
return 0;
}
它的运行,并给出0泄漏,但测试系统给我一个编译错误
2条答案
按热度按时间q3qa4bjr1#
函数
free
的参数类型为void *
但你称之为传递一个整数
没有从
int
类型到void *
类型的隐式转换。因此编译器发出错误。还要注意的是,一般来说,
int
类型的对象不足以存储地址,所以调用free
也会调用未定义的行为。qaxu7uf22#
更正:
阅读Vlad关于为什么它是错误的解释。他解释得很正确。其次,如果你的代码不需要C++兼容性,千万不要转换你的malloc指针。这是不好的做法。
integar类型int在声明时已经分配了内存,因为int的大小是编译器已知的。你不应该为integer类型分配内存。malloc返回一个指向分配内存的指针,所以你不能在非指针类型中存储malloc返回值。
下一个你做错的事情是你试图在释放内存后使用scanf读取一个值。如果你没有内存,它会存储在哪里?