作者:
deo2000 (800IM)
2016-10-06 11:37:51這個 function 主要是將自己寫的 Key&Value struct link list
串成一個 QueryString
大約一半機率會發生如下錯誤:
*** Error in
`/home/lky/workspace/*******************': free():
invalid next size (normal): 0x00000000021297e0 ***
想請版友幫忙診斷一下,是不是哪邊記憶體處理有缺失?
//用來組合 QueryString 的 node
struct listKeyValuePair
{
char* strKey;
char* strValue;
//Link list
struct listKeyValuePair* perv;
struct listKeyValuePair* next;
};
//用來把 listKeyValuePair 已經串起的整個 Link List 轉換成單一 QueryString
char* ConvertToQueryString(struct listKeyValuePair* node)
{
char* strQueryString = (char*)calloc(sizeof(char),0);
while(NULL != node)
{//一個接一個按照QueryString格式串上去
size_t newLength =
strlen(strQueryString)+strlen(node->strKey)+strlen(node->strValue)+3;
strQueryString = (char*)realloc(strQueryString, newLength);
if(NULL == node->perv)
{//第一個
sprintf(strQueryString, "%s=%s",node->strKey,
node->strValue);
}
else
{//第二個以後
sprintf(strQueryString, "%s&%s=%s", strQueryString,
node->strKey,
node->strValue);
}
node = node->next;
}
//puts(strQueryString);
return strQueryString;
}
向calloc申請0個位置?而且參數前後好像放錯了,小弟亂猜的記憶體那麼便宜了,不用那麼節檢吧XDXD
用snprintf看了一下所以你一直realloc嗎 為何不算長度一次配完記憶體
calloc(1,0)回傳值是什麼呢,沒空間的空間,三次元嗎而且return字串的char*真的很少見的寫法,有創意正常應該是把字串空間先創好,在給進含數的參數運用
作者:
LPH66 (-6.2598534e+18f)
2016-10-06 13:35:00樓上好像講到重點了: calloc 的參數是 (個數, 元素大小)並不是 (總長度, 內容值), 所以應該要寫 calloc(1,1) 才對calloc 一定會填 0 所以也不用自己寫 0原 PO 你試試最一開始的寫法但把 (1,0) 換成 (1,1) 看看newLength 其實只要 +1 即可, 但 +3 其實也無妨就是咦不對, 我錯了...你有中間連接的字串所以需要 +3 沒錯