對於我的網絡類,我們正在構建基於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