gpt4 book ai didi

c++ - 使用双指针,从 **void 进行转换。 (未处理的异常 0xC0000005 : Access violation)

转载 作者:行者123 更新时间:2023-11-30 04:06:05 27 4
gpt4 key购买 nike

我正在动态创建一个对象数组(图像对象)。我有一个函数可以导出一个指向所述对象的双指针。这个返回被传递给一些不知道我的 Image 类的代码,所以我将我的双图像指针转换为双空指针。此代码稍后将相同的双空指针向下传递回某些识别我的 Image 类的代码。最后,我会将双空指针重新转换为双图像指针并对对象进行处理。

问题是我遇到了一个熟悉的错误(未处理的异常 0xC0000005)。

这里是错误发生的地方-

void Game::drawState0(void** vPtr)
{
Image **iptr = (Image**)(vPtr);

(*iptr)[0].doStuff(); //this line blows up
(*iptr)[1].doStuff();
(*iptr)[2].doStuff();
}

奇怪的是,我传递的地址看起来没问题。那么为什么会出现访问冲突呢?

enter image description here

更新:额外要求的信息

enter image description here

UPDATE2:调用 drawState0 的代码(删除了不相关的位)

void **imgPtr;
imgPtr = update();
renderImage(imgPtr);

渲染图像的定义:

void Top::renderImage(void** vPtr)
{
render(vPtr); // call render() in derived object
}

在派生对象中渲染的定义

void Top::render(void** vPtr)
{
switch (var)
{
case 0:
{
drawState0(vPtr);
break;
}
//....

更新 3:创建 imgPtr(这是在重铸后将双指针向上传递的函数

Image **st0 = new Image*[3];

for (char j = 0; j<= 2; j++)
{
st0[j] = new Image;
}

//..
imgPtr = (void**)st0;
return imgPtr;

最佳答案

不确定我看到的是什么,但如果 vPtr 是一个指针数组,我相信它是,你想改为这样做:

iptr[0]->doStuff();
iptr[1]->doStuff();
iptr[2]->doStuff();

关于c++ - 使用双指针,从 **void 进行转换。 (未处理的异常 0xC0000005 : Access violation),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com