对于我的网络类,我们正在构建基于UDP协议的BitTorrent客户端,这非常酷,但由于某些原因,我在C字符串方面遇到了很多麻烦。char *数组不保留价值C
我第一次收到一个数据包时,我做的:
if(server_data == NULL){
server_data = malloc(one_block.total_blocks*sizeof(char*));
int i;
for(i = 0; i < one_block.total_blocks; i++){
server_data[i] = malloc(sizeof(char*));
server_data[i] = "";
}
}
这里,SERVER_DATA是char**
和one_block是struct
保存数据包信息和有效载荷。
接下来我做的:
server_data[one_block.which_block] = one_block.payload;
blocks_rcv++;
if(blocks_rcv == one_block.total_blocks-1)
done = TRUE; //macro
if(done){
int i;
for(i = 0; i < one_block.total_blocks; i++){
printf("%s", server_data[i];
}
}
一切似乎很好,很正常,但任何疯狂的原因,当我收到的所有数据包之前打印SERVER_DATA的内容,我看到每个数据包不同的数据。之后,我设置了done = TRUE并进入for循环,数组中的每个点都包含相同的字符串值。
我不知道为什么会发生这种情况,我真的很想了解从开始到结束,数组内容如何变化,尽管我通过读入的循环的每次迭代来验证它们一次一个数据包。
'server_data [i] =“”;/*内存泄露* /' – FatalError 2013-02-21 05:26:34
如果你做'malloc(sizeof(char *));'你只分配四个或八个字节。 – 2013-02-21 05:41:06