c内存分配

时间:2011-01-02 11:26:38

标签: c pointers memory-management

我有以下问题。代码就是这个

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变为1时,tmp被复制到单词[1]中,单词[0]也会发生变化。可能是什么问题?

感谢

3 个答案:

答案 0 :(得分:2)

您的计数器与您分配给它的含义之间似乎存在差异。 num_tokens反映了您的单词数组中的标记数。这意味着在你的分配中你应该分配'num_tokens'而不是'num_tokens + 1'。

然后,您应该在num_tokens-1处分配。

如果你不这样做,那么就我所看到的那样,你永远不会写入0位置,这可能导致那里的单位化数据,以及随之而来的感觉数据“改变”或被“覆盖”

总结:单词[0]永远不会被这种类型的代码写入,你会在那里找到随机数据。

答案 1 :(得分:0)

num_tokens++; // 0 => 1

strcpy(words[num_tokens], tmp); // copy tmp to words[1]

答案 2 :(得分:0)

num_tokens++;之后放置strcpy();因为在strcpy行,num_tokens已经是1. num_tokens 0未定义。感谢。