![](/img/trans.png)
[英]Two pointers are pointing to same memory address, how to avoid memory leak in case freeing of these two happens at independence place?
[英]Problem with two pointers pointing to same place
我的指針有問題,我不知道如何解決。 我的指針p指向 memory 中的某個地址。 我想將指針q指向完全相同的地址。 之后,我想將指針p指向 NULL。 問題是,在我這樣做之后,指針q也指向 NULL,但我希望他繼續指向初始地址。 有沒有辦法做到這一點? 這是我想做的簡單代碼:
int* p = &a; //pointer "p" now points to "a"
int* q;
q = p; //pointer "q" points to "a" as well
*p = NULL; //pointer "p" points to NULL
printf("%d", *q); //pointer "q" points to NULL as well, but I want him to keep pointing to "a"
在您的代碼中, p 和 q 指向相同的 memory 位置。 您沒有將指針更改為不同的位置,而是將 p(也由 q 指向)指向的值覆蓋為 NULL。
這應該有效。
int a = 5;
int* p = &a; //pointer "p" now points to "a"
int* q = &a;
p = q;
p = NULL; //pointer "p" points to NULL
printf("%d", *q);
*p = NULL; //pointer "p" points to NULL
*p = NULL; //pointer "p" points to NULL
這是錯誤的,你取消引用p
並設置為它引用的NULL
值。
使用p = NULL
。
問題在這里: *p = NULL; //pointer "p" points to NULL
*p = NULL; //pointer "p" points to NULL
您不是在重置指針指向的位置,而是在引用位置設置值。
只是一個例子:
*ptr = value // (writes the value to the memory location of ptr)
ptr = value // (changes the referenced memory location to value)
您的代碼中的問題是:
*p = NULL;
這樣,您取消引用p
並將NULL
的值寫入a
,這在您的情況下是錯誤的。 NULL
用於分配或與指針進行比較,而不是指向指針指向的 object(除非引用的 object,這里a
指針也是指向指針)。
您需要省略取消引用運算符 ( *
):
p = NULL;
將NULL
分配給p
而不是a
。
更正的代碼( 在線示例):
#include <stdio.h>
int main (void)
{
int a = 5;
int* p = &a; //pointer "p" now points to "a"
int* q;
q = p; //pointer "q" points to "a" as well
p = NULL; //pointer "p" points to NULL
printf("*q = %d\n", *q);
printf("p = %p", (void*)p);
}
Output:
*q = 5
p = (nil)
*p = NULL; //pointer "p" points to NULL
不,不是的。 您取消引用此指針並將a
設置為 NULL 轉換為int
(通常為零)
如果要將p
設置為 NULL ,則需要p = NULL
;
如果您的想法是讓p
引用q
指針,您需要將代碼更改為:
int a = 5;
int* q = &a;
int **p;
p = &q;
*p = NULL; //now *p && q are NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.