C++指针强转与打印的问题

2022-11-21  本文已影响0人  寽虎非虫003

问题引入

我在使用某些供应商提供的库的时候发现,他们的指针在linux下面强转为了long,而long不仅会表示这种被转换过的指针与他们提供的接口交互,也会继续在某些地方充当数字本身,而我在尝试使用long提供的指针指向的数据的时候遇到了问题。

看一部分测试代码

#include <iostream>
using namespace std;

int main()
{
    //int a = 5;
    //int *p = &a;
    //cout<<p<<endl;
    //cout<<(long)p<<endl;
    //long x = (long)p;
    long x = 89;
    cout<<(int*)x<<endl;
    int *pn = (int*)x;
    cout<<pn<<endl;
    unsigned char *p = (unsigned char *)pn; // 可以正常运行
    cout<<p<<endl;//不能正常打印
   return 0;
}

测试平台为在线C++
以上代码的输出为

0x59
0x59

run: line 1:     3 Segmentation fault      (core dumped) LD_LIBRARY_PATH=/usr/local/gcc-9.2.0/lib64 ./a.out

Exited with error status 139

在这里面,long的值可以转换为int*但是无论是一次转换成unsigned char*还是曲线转换,在调用的时候都会出错,哪怕只是打印地址值。目前尚不清楚原因。

上一篇 下一篇

猜你喜欢

热点阅读