c++ reinterpret_cast〈int*>在引用void函数时失败[已关闭]

bq8i3lrv  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(124)

昨天关门了。
这篇文章是20小时前编辑并提交审查的。
Improve this question
我在这里提出这个问题是因为我遇到了内存级别的问题,而不是编码级别的问题,当前我运行了以下代码

void* Newnumber;
int* ptr;
Newnumber = &dbCircle;
ptr = reinterpret_cast<int*>(Newnumber);
        
*ptr = 1; //memory error here why?

dbCircle(x, y, RADIUS); //Void function(int, int, int);

这段代码在int main()中运行,可以很好地编译,但会产生以下错误:
program. exe出现未处理的异常:0xC0000005:写入位置0x004e9e20时发生访问冲突
为什么?基本上,如果你返回1点到函数dbCircle并从那里开始,这应该像我试图说的那样工作
我所期望的是,如果返回1来使用引用指向void dbCircle函数,但是由于某种原因,即使代码构建良好,我也会遇到复杂的内存错误。

dtcbnfnu

dtcbnfnu1#

"我想说的是,如果您向函数dbCircle返回1个点,然后从那里开始"
你的意图不完全清楚。
但是你的代码绝对没有做类似的事情。
此行:

Newnumber = &dbCircle;

Newnumber赋给函数dbCircle的地址,即函数代码所在的地址。
此行:

ptr = reinterpret_cast<int*>(Newnumber);

ptr赋给同一地址,解释为它包含有效的int(实际上不包含)。
现在这一行:

*ptr = 1; //memory error here why?

它试图将1写入ptr中存储的地址,即dbCircle的**代码地址。
由于这是非法的,因此您会得到一个访问冲突运行时错误。

相关问题