Ich möchte den Abstand zwischen einem Programm der bss Abschnitt und dem Beginn des Heap-Abschnitt berechnen, also habe ich ein Programm wie dieses bekam:Pointer arithmatic zu kompilieren fehlgeschlagen ist, sagt gcc ungültige Typumwandlung
$ 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;
}
Wenn ich diesen Code zu kompilieren mit:
$ g++ 1.cpp
Die Fehler sind:
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);
^
Ich glaube nicht, es unpassend ist ein int*
zu int
konvertieren. Ich habe viele Beispiele dafür im Internet gefunden.
Warum wird mein Code nicht kompiliert?
@ user1810087 Ihr Entfernen des C++ - Tags war falsch. OP verwendet g ++ und der Code ist C++ (es wird auch in C kompiliert, da die Sprachen ähnlich sind, aber die Frage betrifft nicht C). – 2501