t2分配后指向的記憶體是否仍然可以訪問?
#include<stdio.h>
int main()
{
double *t1 = (double *)calloc(6, sizeof(double));
double *t2 = (double *)calloc(6, sizeof(double));
t2=t1;
free(t1);
return 0;
}
上面的代碼推薦嗎?它會花費記憶體泄漏嗎?或者,在這種情況下,記憶體t2指向是否與指向什么對齊?t1
我應該只是簡單地使用double *t3 = t1嗎?
uj5u.com熱心網友回復:
分配后 t2 指向的記憶體是否仍然可以訪問?
不
上面的代碼推薦嗎?
不。
它會花費記憶體泄漏嗎?
是的,指向的記憶體t2泄露了。
或者,在這種情況下,記憶體 t2 是否與 t1 指向的內容對齊?
確實如此,但原始calloc記憶丟失了。
我應該只是簡單地使用
double *t3 = t1嗎?
是的,如果您只想將另一個指標變數指向同一地址。
uj5u.com熱心網友回復:
在這兩行之后
double *t1 = (double *)calloc(6, sizeof(double));
double *t2 = (double *)calloc(6, sizeof(double));
- t1 是參考第一行中分配的記憶體的唯一方法
- t2 是參考第二行中分配的記憶體的唯一方法
因此,如果您想使用并最終釋放這些塊,則需要在某處使用這些指標值。
所以
t2=t1;
現在失去對第二個塊的所有訪問權限。你沒有辦法參考它。't1' 和 't2' 沒有什么特別之處,你可以這樣做:
double * foo = t1;
double * bar = t2;
t2 = t1;
t1 = NULL;
或者你喜歡的任何東西,因為現在你將這些值存盤在 'foo' 和 'bar' 中。您只需將這些指標值存盤在某處。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462782.html
