malloc釋放的想到的問題

2021-06-28 20:59:29 字數 415 閱讀 3365

原因是這樣的,在看我們的服務後台**時,發現如下段**有點意思:

char *s = strdup(「***xx");   //拷貝一堆字串

while (char *token = strsep(&s, ","))

free(s);

strsep中針的位置會做改變,如果釋放乙個非頭部的指標會怎樣呢,之前沒有考慮過,然後就做了個小測試,記錄一下免得以後又忘了。

void main()

先任意分配一段空間,然後指標忘下指一下,然後釋放,這樣執行後會報錯誤。

如果s沒有分配空間那樣報錯是可以理解的(因為釋放了野指標),但現在分配了空間,而且malloc分配的是連續的空間,s+1的位址肯定也是知道的啊,為什麼釋放的時候會報錯,free時只能釋放malloc返回的頭指標嗎,而且free是怎麼確定該釋放多大的空間的?

Malloc與free記憶體的分配和釋放

malloc函式 用於分配記憶體 例 double ptd ptd double malloc 30 sizeof double 這個例子 請求 30個double型別值得空間,並且把ptd指向該空間所在位置,注意ptd是作為指向乙個double型別值得指標宣告,而不是指向30個double型別值得...

malloc函式的問題

首先我們看看以下 include include include define size 0x40000 十六進製制的表示方法,等於十進位制262 144,你們要習慣用十六進製制,因為兩個十六進製制剛好是乙個位元組 int main 就是以上 你們使用vc和turbo c 分別編譯,看生成檔案的大小...

約瑟夫環問題想到的

約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。在思考這個題目時,想到了很多,開始時,是考慮使用直接一遍一遍的遍歷,但...