2013-12-05 2 views
1

Здесь я хочу извлечь слова из строки 'text'. Д-р памяти говорит мне, что у меня есть утечка памяти по строке words = (char**) realloc(words, (amount + 1) * sizeof(char*)); В чем проблема?Ошибка утечки памяти, функция realloc()

p = strtok(text, " "); 
while(p != NULL) { 
    words = (char**) realloc(words, (amount + 1) * sizeof(char*)); 
    words[amount] = strdup(p); 
    amount ++; 
    p = strtok(NULL, " "); 
} 
for(i = 0; i < amount; i ++) { 
     free(words[i]); 
} 

ответ

2

Вы используете strdup, он выделит новую строку. Поэтому, прежде чем вы отпустите массив, вам нужно освободить каждую строку, выделенную вами strdup.

Вы не освобождаете весь массив. Часть, которую вы выделяете realloc.

Так что отсутствует простой:

free(words); 
+1

На самом деле это, кажется, именно то, что он делает, он просто забывает освободить фактический массив. –

+0

@JoachimIsaksson, да, правильно, я просто не указал его. :) – Devolus

+0

Я делаю это в моем цикле ниже – user3021370

Смежные вопросы