Вопрос

This may be a newbie fault, but I am greatful for any tips on what exactly I do wrong.

The code:

int main()
{
  int i =0;
  char ** nameslist;
  nameslist = malloc(5 * sizeof(char*));

  for (i=0; i <5; i++)
  {
      nameslist[i]=malloc((20+1)*sizeof(char));
  }

  nameslist[0]="John";
  nameslist[1]="Adam";
  nameslist[2]="Nick";
  nameslist[3]="Joe";
  nameslist[4]="Peter";

  for (i=0; i <5; i++)
  {
    free(nameslist[i]);
  }

  free(nameslist);
  return 0;
}

Using Valgrind, I still see that I have memory leaks in heap - how do I fix this issue? I suspect that I malloc too much space - but still, how do I go about freeing space I don't necesarrily use?

Thankful for any hints!

Это было полезно?

Решение

The problem is that when you write this:

nameslist[0]="John";

You're not actually using the memory you have allocated. "John" is itself a pointer and you're overwriting the adress returned by malloc with this new pointer.

Use the strncpy() function to copy the string into the memory you allocated.

Другие советы

Your malloc and free stuff is fine, but you are orphaning the original string when you try to do assignment like this:

nameslist[0]="John";

Instead you should use strcpy:

strcpy(nameslist[0], "John");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top