堆上分配的C free char*

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)

谢谢,罗布

Ada*_*erg 10

strlen不考虑strcpy添加的null终止符,你需要"malloc(strlen(buffer)+1)"


Dav*_*nco 9

是的,代码有内存泄漏.

罪魁祸首是: name = malloc(strlen(buffer));应该考虑
name = malloc(strlen(buffer)+1);到这一点\0.

你现在应该可以自由了person->name.