让我们查看以下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的大小可能是相同的,当结构中有两个指针时,您需要分配更多。