指针的减法有编译错误,提示转型是非法的。
我想计算一下一个程序的bss段和堆的底部之间的距离,看看sbrk最多能把数据段扩大多少。代码如下:$ 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,我的程序应该如何修改才能达到预期?
谢谢。
所以你要用intptr_t,或者用long。 windoze 发表于 2016-09-21 16:54
所以你要用intptr_t,或者用long。
为什么long可以, 而int就不行?
回复 3# cdsfiui
你都不看错误信息么? 转换成 char *再减就行 回复 3# cdsfiui
你要是能找台奔腾CPU的电脑int就可以。
页:
[1]