簡體   English   中英

取消引用已分配了特定內存地址的指針

[英]Dereferencing a pointer that has been assigned specific memory address

我正在使用指針和數組,必須在其中指定數組在內存中的起始位置或指針應保留的內存地址。 指針或數組獲取地址; 但是,我不能服從或分配值。

我嘗試運行以下代碼,但它給我帶來了Segmentation Fault。 我在這里做錯了什么? 請幫忙!

int *a = (int *)0x100;
cout << a << endl;            //prints out 0x100
*(a) = 10;        <------ seg fault on this line

按照數組的代碼,

int *b = new b[10];
b = (int *)0x0;
cout << b << endl;           //prints out 0x0
b[0] = 10;     <----  seg fault on this line 

我在這里做錯了什么?

您正在取消引用未指向對象的指針。 這具有不確定的行為,但是如果運氣好的話,操作系統可能會檢測到錯誤並引發段錯誤。

解決方案:首先為對象分配內存。 您應該如何分配取決於您打算如何使用該對象。 分配對象的一種簡單方法是使用自動變量:

int main() {
    int object;
    int* pointer = &object; // now you can assign the pointer to the specific memory address of the existing object
    *pointer     = 10;      // dereferencing is OK
}


flag

指針不會獲取未指定對象的地址嗎?

指針將使用指定對象的地址。 編譯器指定地址是什么。

我如何使指針指向地址0x100 ...

使用演員表。 您的程序已經做到了。

...並使用該內存來達到我的目的?

在標准C ++中不可能使用任意內存。 您將需要采用平台特定的方法來解決您的問題。

首先為int a分配內存,因此您正在進行段錯誤。

int *a = new int;
*a = 10;
delete a;

對於第二種情況,您還取消引用了空指針。 您無需將b設置為零地址。 通過這樣做,我相信你會失去陣列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM