Распределение памяти - PullRequest
       7

Распределение памяти

0 голосов
/ 02 января 2011

У меня следующая проблема. Код такой

num_tokens++;
words = (char**) realloc(words, sizeof(char**) * (num_tokens + 1) );
words[num_tokens] = (char *) malloc(sizeof(char) * strlen(tmp)+1 );
strcpy(words[num_tokens], tmp);

где num_tokens изначально установлен в 0, а слова содержат, изначально, один указатель на строку. Я обнаружил, что когда num_tokens попадает в единицу и tmp копируется в слова [1], слова [0] также меняются. В чем может быть проблема?

спасибо

Ответы [ 3 ]

2 голосов
/ 02 января 2011

Кажется, существует несоответствие между вашим счетчиком и значением, которое вы ему назначаетеЧисло num_tokens отражает количество токенов, которые есть в вашем массиве слов.Это означает, что в вашем распределении вы должны размещать 'num_tokens', а не 'num_tokens + 1'.

Затем вам следует назначить номер num_tokens-1.

Если вы этого не сделаете, то, насколько я понимаю, вы никогда не запишете в позицию 0, что может привести к тому, что там будут унифицированные данные, и ваше последующее ощущение, что данные «изменились» или были «перезаписаны»

Подводя итог: слова [0] никогда не будут записаны с этим типом кода, и вы найдете там случайные данные.

0 голосов
/ 02 января 2011

Разместите num_tokens++; после strcpy();, потому что в строке strcpy num_tokens уже равно 1. num_tokens 0 не определено.Спасибо.

0 голосов
/ 02 января 2011
num_tokens++; // 0 => 1

strcpy(words[num_tokens], tmp); // copy tmp to words[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...