我希望計算程序的BSS段和堆段的起點之間的距離,讓我有一個這樣的程序:指針arithmatic無法編譯,GCC說無效的類型轉換
$ cat 1.cpp
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
int empty;//bss
int main()
{
char*p=(char*)malloc(0);
printf("%d\n",(int)p-(int)&empty);
return 0;
}
當我編譯使用代碼:
$ g++ 1.cpp
的錯誤是:
1.cpp: In function ‘int main()’:
1.cpp:8:22: error: cast from ‘char*’ to ‘int’ loses precision [-fpermissive]
printf("%d\n",(int)p-(int)&empty);
^
1.cpp:8:30: error: cast from ‘int*’ to ‘int’ loses precision [-fpermissive]
printf("%d\n",(int)p-(int)&empty);
^
我不認爲將int*
轉換爲int
是不合適的。我在互聯網上發現了很多例子。
爲什麼我的代碼不能編譯?
@ user1810087您刪除C++標記不正確。 OP使用g ++,代碼是C++(它也會用C語言編譯,因爲語言是相似的,但問題不在於C)。 – 2501