Malloc导致内存泄漏

Malloc cause memory leak

本文关键字:泄漏 内存 Malloc      更新时间:2023-10-16

我有以下代码。

#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或更大的复选框;否则,您可以将一个负数传递给mallocmalloc会将其解释为一个大正数;这不应该发生。