rob*_*s35 5 c heap free memory-leaks char
以下代码示例中是否存在内存泄漏,因为我已在堆上为已释放的名称分配了内存?如果我添加免费(person-> name); 在免费(人)之前; 然后我在VS中得到一个运行时错误"CRT检测到应用程序在堆缓冲区结束后写入内存".
header.h:
#ifndef HEADER
#define HEADER
typedef struct person {
char *name;
} Person;
#endif
Run Code Online (Sandbox Code Playgroud)
由source.c:
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
#define BUFFERSIZE 500
int main (int argc, char* argv[]){
Person *person = NULL;
char buffer[BUFFERSIZE];
printf("Enter name\n");
fgets(buffer, BUFFERSIZE, stdin);
{
char *name;
person = malloc(sizeof(Person));
name = malloc(strlen(buffer));
strcpy (name,buffer);
person->name = name;
}
free(person);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谢谢,罗布
是的,代码有内存泄漏.
罪魁祸首是:
name = malloc(strlen(buffer));应该考虑
name = malloc(strlen(buffer)+1);到这一点\0.
你现在应该可以自由了person->name.