问题描述
我想从second_pointer指向直接传递给它的地址,但是错误是分段错误(核心已转储) 为什么?
short i {} ;
short* pointer { &i} ;
LOG " address of variable : " << pointer ;
short* second_pointer = (short*) 0x7ffe8475245e ;
LOG " value pointed by second pointer : " << *second_pointer ;
这就是结果:
address of variable : 0x7fff56ab3756
value pointed by second pointer : Segmentation fault (core dumped)
解决方法
每次运行程序时,可以通过地址空间布局随机化来随机化程序中或堆栈中的地址。因此,您在该程序的一次运行中看到的地址可能在同一程序的第二次运行中无效。
请勿对C或C ++程序中的变量硬编码内存地址。它们不能保证稳定。 plt.figure()
for row in DF.index:
plt.plot(DF.columns,[a for a,b in DF.loc[row,]],'b.',label="Male")
plt.plot(DF.columns,[b for a,'g+',label="Female")
plt.legend(loc="upper right")
plt.show()
运算符是在C中获取对象地址的唯一安全方法。
我能想到的在没有使用固定地址的系统上使用固定内存“地址”的唯一正当理由可能是您正在尝试模拟具有固定地址空间的东西。
您可以使用数组构建自己的“变量”和内存空间系统。然后,您将覆盖运算符,以便地址0x7ffe8475245e映射到实际位于此数组中的其他内容(通常只是一个偏移量)。如果您的“嵌入式”代码使用基元,则有些痛苦,但如果改用函数来访问该内存块,则它可能会非常简单。
现在,如果您出于“无效”原因进行操作(例如尝试访问另一个进程的内存),我将指导您仔细阅读此How is it possible to access memory of other processes?