簡體   English   中英

GCC 錯誤、錯誤代碼或 gcc 是好的編譯器

[英]GCC error, bad code or gcc is good compiler

我有這個代碼:

int *b;
b = 50;
printf("Pointer point to address: %p and also point to this value: %d", b, *b);
return 0

我收到此錯誤:main.c:6:7: 警告:賦值使指針從整數而不進行強制轉換 [-Wint-conversion]
超時:受監控的命令轉儲核心
sh: line 1: 47524 Segmentation fault timeout 10s main

我想從五十字節的內存中打印值。

我的代碼是對的還是編譯器會起作用。

假設您在 Linux、Mac 或 Windows 等最新操作系統上運行該程序,則 50 將不是位於物理內存中地址 50 處的字節; 那是虛擬空間中的地址。

那么您的進程(程序)只能訪問該虛擬空間中非常有限的范圍,其中 50 不太可能來自; 在這種情況下,操作系統會保護非法訪問並停止您的進程(段錯誤); 無論如何,您甚至可能會得到一個可能正確也可能不正確的結果,這稱為未定義行為,在這種情況下,您最好不要依賴明顯有效的可執行文件。

例如,要直接訪問物理內存,您需要構建內核模塊,或者從類似 DOS 的操作系統啟動。

main.c:6:7: 警告:賦值使指針從整數而不進行強制轉換 [-Wint-conversion]

話雖如此,您需要將50int *以清除警告。

b = (int *)50;

暫無
暫無

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

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