gpt4 book ai didi

c++ - 从 struct 访问数组会使程序崩溃

转载 作者:行者123 更新时间:2023-11-30 02:52:52 25 4
gpt4 key购买 nike

我刚开始使用 C++ 编程,但在从我定义的结构访问数组时遇到了问题。

我正在使用 OpenGL 使用纹理将像素数据数组绘制到屏幕上。像素数据数组存储在图像结构中:

struct Image {

GLubyte *pixels;
int width;
int height;
int bitrate;

Image(int w, int h, GLubyte* pixels, int bitrate){
this->width = w;
this->height = h;
this->pixels = pixels;
this->bitrate = bitrate;
}

};

图像初始化如下:

GLubyte* pix = new GLubyte[WIDTH*HEIGHT*3];
Image image(WIDTH, HEIGHT, pix, 3);

有一个名为 Screen 的单独结构,它使用 Image 实例进行初始化:

    struct Screen{

int width, height;
Image* screen;

void setScreen(Image* screen, const int width, const int height){
this->screen = screen;
this->width = width;
this->height = height;
}

};

屏幕像这样初始化(在图像声明之后):

displayData = new Screen();
displayData->setScreen(&image, WIDTH, HEIGHT);

当我访问 Width 或 Height 变量时,它获得了正确的值。然后我将屏幕实例传递给此方法:

void renderScreen(Screen *screen){
std::cout << "Rendering Screen" << std::endl;
for(int x = 0; x < screen->width; x++){
for(int y = 0; y < screen->height; y++){

std::cout << "rendering " << x << " " << y << std::endl;

//Gets here and crashes on x - 0 and y - 0

screen->write(0xFFFFFFFF, x, y);
}
}
std::cout << "done rendering Screen" << std::endl;
}

这样调用:

render(displayData); (displayData is a Screen pointer)

指针对我来说很陌生,我不知道有关将指针传递给结构或类似内容的规则。

最佳答案

displayData->setScreen(&image, WIDTH, HEIGHT);

这似乎表明您正在通过获取局部变量的地址来传递指向 Image 的指针,例如。

void method() {
Image image;
displayData->setScreen(&image, ..)
}

在这种情况下,image 被分配到堆栈上,并且在退出声明该局部变量的范围时指向它的指针不再有效。

你应该在堆上分配它:

Image *image = new Image(..);
displayData->setScreen(image, ...);

通过这种方式,对象将一直存在,直到您使用 delete image 显式删除它。

关于c++ - 从 struct 访问数组会使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18475179/

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