Я хочу, чтобы вычислить расстояние между БСОМ секцией программы, и в начале кучной секции, так что у меня есть программа, как это:Pointer arithmatic не удался собрать, НКУ говорит преобразование недопустимого типа
$ 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