我想提出一個自定義的複製功能,這樣之前釋放的指針會發生什麼:如果我不分配它
if (s1 == NULL || s2 == NULL || s2->buf == NULL)
return;
if (s1->len + 1 < s2->len + 1)
{
if (s1->buf)
free (s1->buf);
s1->buf = (char *) malloc (s2->len + 1);
if (s1->buf == NULL)
return;
}
for (int i = 0; i < s2->len; i++)
s1->buf[i] = s2->buf[i];
s1->len = s2->len;
是具有字符指針簡單結構的指針,其中爲S1和S2和無符號整數。
if (s1->len + 1 < s2->len + 1)
{
if (s1->buf)
free (s1->buf);
s1->buf = (char *) malloc (s2->len + 1);
if (s1->buf == NULL)
return;
}
這將檢查s1內是否有足夠的空間以適合s2。如果沒有,它會檢查現有的內存並釋放它。在完成之後,它將爲s1分配一個新的內存塊,其大小爲s2 + 1(include \ 0)。
這裏是我很困惑
如果在字符指針爲S2足夠的空間以適應S1(包括\ 0),它不是免費的()和調用malloc()再次,它只是分配給for循環,它會保留s1的原始內容嗎?
你爲什麼要說'if(s1-> len + 1 < s2-> len + 1)...'爲什麼不只是'if(s1-> len < s2-> len)...'? – zellio 2012-01-30 04:07:07
不知道這是多餘的,謝謝 – user1169094 2012-01-30 04:07:52