Malloc导致内存泄漏
Malloc cause memory leak
我有以下代码。
#include<stdio.h>
#include<string.h>
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main(){
int *N=NULL;
char *S=NULL,input[50],*Par=NULL,T='^';
printf("Give me the equation: ");
scanf("%s",input);
printf("n%d",strlen(input));
S=(char*)malloc(3);
N=(int*)malloc((strlen(input)-3)*sizeof(int));
_CrtDumpMemoryLeaks(); /* Memory leak detected! */
free(S);
free(N);
return 0;
}
malloc毫无问题地返回后,带有注释的行中的函数将在visualstudio的输出窗口中打印下一条消息:
Detected memory leaks!
Dumping objects ->
c:usersmanosdocumentsvisual studio 2010projectsgcjgcjcgcjgcjcgdjjj.cpp(17) : {60} normal block at 0x00A343F8, 16 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
c:usersmanosdocumentsvisual studio 2010projectsgcjgcjcgcjgcjcgdjjj.cpp(16) : {59} normal block at 0x00A31B30, 3 bytes long.
Data: < > CD CD CD
Object dump complete.
当程序停止时,视觉检测到堆损坏。有人知道会发生什么吗?据我所知,我的代码没有任何问题,那么malloc会发生什么呢?我是不是做了什么导致内存泄漏的事?
在释放所有内存之前,不应尝试检测内存泄漏。在free
之前调用_CrtDumpMemoryLeaks();
——处理您分配的所有内容——必然会检测到错误的"泄漏",这些泄漏只是程序正在使用的内存。
将检查移到最后将解决问题:
S=(char*)malloc(3);
N=(int*)malloc((strlen(input)-3)*sizeof(int));
free(S);
free(N);
_CrtDumpMemoryLeaks(); /* No memory leaks! */
您还应该添加一个strlen(input)
为3或更大的复选框;否则,您可以将一个负数传递给malloc
,malloc
会将其解释为一个大正数;这不应该发生。
相关文章:
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存