内存泄漏char* c程序



让我们查看以下C代码,用于将未定义长度复制为结构:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
typedef struct nNameStruct{
  char* nName;
  //char* nName2;
} nNameStruct;
nNameStruct * NameCreate(char *buffer) {
  nNameStruct *pNew;
  pNew = (nNameStruct*) malloc(sizeof(nNameStruct*));
  pNew->nName = (char*) malloc((strlen(buffer)+1)*sizeof(char*));
  strcpy(pNew->nName,buffer);
  //pNew->nName2 = (char*) malloc((strlen(buffer)+1)*sizeof(char*));
  //strcpy(pNew->nName2,buffer);
  return pNew;
}
int main() {
  nNameStruct *newName;
  char buffer[]="Trial string";
  newName=NameCreate(buffer);
  printf("%sn",newName->nName);
  //printf("%sn",newName->nName2);
  free(newName->nName);
  //free(newName->nName2);
  free(newName);
  return 0;
}

此程序运行良好。但是,如果我还想分配另一个字符串(使用注释的行(,我会有内存泄漏问题,并且Valgrind检查中充满了错误。这里有什么问题?

此行有一个问题:

pNew = (nNameStruct*) malloc(sizeof(nNameStruct*));

它应该是大小(nnagestruct(。当结构包含一个单个指针时,nnagestruct*和nnagestruct的大小可能是相同的,当结构中有两个指针时,您需要分配更多。

相关内容

最新更新