我用這個代碼玩:C內存管理更指向同一位置
#include <stdlib.h>
#include <stdio.h>
void function(int *p){
free(p);
}
int main(){
int *i = calloc(3, sizeof(int));
function(i);
i[0] = 'a';
printf("%c\n", i[0]);
return 0;
}
我希望得到一個錯誤,而是它印「A」,如果「一」被釋放爲什麼它打印它?如果main()?(如果可以的話,解釋'p'指針發生了什麼),函數(int * p)會發生什麼影響
假設我有這兩個函數:
int *a = malloc(...);
int *b = a;
他們都指向同一塊內存,但是當我不得不釋放它,我應該叫免費上他們兩個,或只是其中之一?(又爲什麼如果可能的解釋)
謝謝你的明確的答案,這讓我更有意義。我有一個徘徊的問題,可能不值得一個全新的問題。使用你的變量名例如,如果'b'可以等於'a'或'b'也可能等於一些新的malloc'ed內存,我可以免費(a)'然後做一個像'如果(b)免費(b)'?我假設如果前者是真的,'a'會被釋放,因此'如果(b)'不會評估爲真? –
@SSHThis請參閱最新的答案。 –
非常感謝你 –