這是我的代碼:有一個大小為 5 的陣列。我使用 malloc 函式為指標 p 分配記憶體。在這里,我想知道在將記憶體重新分配給同一個指標和釋放指標之后會發生什么,而不是發生什么。當我的 if 條件為真或何時執行。
int main()
{
int array[5] = {2, 5, 3, 10, 9};
int *p = (int*) malloc (sizeof (int));
*p = 5;
if (-1)
{
p = (int *)malloc(sizeof (int));
*p=6;
}
array[0] = *p;
free(p);
for (int i = 1; i < 5, i )
array[i] = array[0];
return 0;
}
uj5u.com熱心網友回復:
記憶體沒有分配給“指標”。
指標只是一個保存地址的變數,就像 anint是一個保存整數值(在一個范圍內)的變數一樣。
給定 some int x = 3;,當程式執行時,除了覆寫它之外x = 8;,沒有對賦值之前的 3 做任何事情。x它消失了,在x.
類似地,當一個新值被分配給一個指標時,除了覆寫它之外,它的舊值不會做任何事情。舊值消失了,指標中有一個新值。
之后int *p = malloc(sizeof *p);,p包含malloc分配的記憶體的地址,假設它是成功的。
該記憶體沒有“分配給指標”。它沒有以任何方式系結到指標。然后我們可以這樣做int *q = p; int *r = p; int *s = p;,我們將有四個指標都指向同一個地址,并且它們是相同的。他們都不會對記憶體有任何特別的要求。
或者,在 之后int *p = malloc(sizeof *p);,我們可以這樣做p = malloc(sizeof *p);,這將在 中存盤一個新地址p。舊地址被覆寫。分配的記憶體仍然被分配,因為沒有釋放它。但是該程式已經丟失了它的地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/493269.html
