這個問題在這里已經有了答案: ASLR 和地址 (1 個回答) 14 小時前關閉。
每次運行完全相同的陳述句時,我都會在 C 程式中獲得不同的記憶體位置。這不應該永遠改變嗎?是的,如果我將 &p 更改為 &x,它仍然會發生。我意識到這兩者應該不同,但是當我反復運行(不編譯)程式以查看它的記憶體地址時會發生這種情況。
#include <stdio.h>
#include <string.h>
int main()
{
int x = 30;
int* p;
p = &x;
printf("%p \n", &p);
}
證明
uj5u.com熱心網友回復:
為什么每次運行記憶體地址都會變
因為您的系統使用地址空間布局隨機化(ASLR),特別是隨機化堆疊放置。
在 Linux 上,您可以為單個行程禁用 ASLR,如下所示:
setarch -R ./a.out
在 GDB 下運行該程式也會默認禁用 ASLR。
我被告知您為變數指定的記憶體地址永遠不會改變。
在程式的特定執行期間,堆疊變數的地址實際上永遠不會改變。它只能在不同的運行之間改變。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395872.html
上一篇:C 指標成員初始化
下一篇:是否可以更改常量資料值?
