我有以下问题。代码就是这个
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]也会发生变化。可能是什么问题?
感谢
答案 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未定义。感谢。