Утечка памяти char * C программа - PullRequest
0 голосов
/ 28 апреля 2018

Давайте рассмотрим следующий фрагмент кода 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("%s\n",newName->nName);
  //printf("%s\n",newName->nName2);

  free(newName->nName);
  //free(newName->nName2);
  free(newName);
  return 0;
}

Эта программа работает довольно хорошо. Однако, если я хочу выделить еще одну строку (используя закомментированные строки), у меня возникают проблемы с утечкой памяти, а проверка valgrind полна ошибок. В чем здесь проблема?

1 Ответ

0 голосов
/ 28 апреля 2018

В этой строке есть проблема:

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

Это должен быть sizeof (nNameStruct). Когда структура содержит один указатель, размеры nNameStruct * и nNameStruct могут быть одинаковыми, когда в структуре есть два указателя, вам нужно выделить больше.

...