2014-10-07 43 views
0

我有這樣的C代碼:免費使用動態分配的內存

int main() 
{ 
    int *p=(int *)malloc(100); //100 bytes 

    for(int i=0;i<10;i++) 
    { 
     p++; 
    } 

    free(p); 

    return 0; 
} 

現在的問題是會釋放(P)釋放所有的100個字節或只有90字節。 free()如何知道要釋放多少個字節..?

+0

你的代碼沒有任何意義。 – 2014-10-07 05:44:59

回答

7

這是違法的。

free的參數必須是由malloc或其表兄或空指針返回的指針。在你的例子中,p已將其值改爲p++

+2

值得注意的是,'malloc'和'free'的典型實現會在指針的可見部分之前存儲分配的大小(可能與其他元信息一起)。但是還有其他的實現,例如使用外部樹木。 – o11c 2014-10-07 05:46:03