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