gpt4 book ai didi

c++ - 二维 vector 的运行时错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:03:47 25 4
gpt4 key购买 nike

我在使用双维 vector 时遇到问题。我已经在我的头文件中将双 vector 声明为外部,并在我的 main() 调用之前在我的 main.cpp 文件中再次声明(不是作为外部)。我调用一个函数来为 double vector 动态分配内存。给定的代码没有编译错误。但是在运行时,如果您访问该 vector ,它会给出 Vector 下标超出范围的异常。我使用我的调试器检查了它,发现 vector 在函数中分配了内存,但一旦它返回(超出函数范围), vector 大小就会回到 0。我附上了代码

颜色.h:

#ifndef __COLOR__
#define __COLOR__

class color{
public :
int r,g,b;

color(void);
color(int R, int G,int B);
};
#endif

颜色.cpp

#include"color.h"
#include <iostream>

color::color(void){
r=g=b=0;
}
color::color(int R, int G,int B){
if(R<=1 && G<=1 && B<=1){
r=R;g=G;b=B;
}
else{
std::cout<<"Error in RGB values";
}
}

标题.h:

#ifndef __HEADER__
#define __HEADER__

#include <iostream>
#include <vector>

#include "color.h"

const int windowWidth=200;
const int windowHeight=200;

void function();

extern std::vector <std::vector<color> > buffer;

#endif __HEADER__

颜色.cpp

#ifndef __COLOR__
#define __COLOR__

class color{
public :
int r,g,b;

color(void);
color(int R, int G,int B);
};
#endif

主要.cpp

#include "header.h"
std::vector <std::vector<color> > buffer;
void main(void){
//myClass obj=myClass(1,4);

function(/*obj*/);
std::cout<<"HI";
std::cout<<"vector : "<<buffer[0][0].r; //VECTOR SUBSCRIPT OUT OF RANGE
getchar();
}
void function(){
std::vector <std::vector<color> > buffer (2*windowHeight, std::vector<color>(2*windowWidth));
std::cout<<"HI";
}

最佳答案

您的函数调用 function() 对定义在 main.cpp 中的变量 buffer 没有副作用。所以在你的 main 函数中它试图访问它会导致未定义的行为。

如果您打算让 function() 修改全局 buffer 变量,您可以让 function() 返回 vector 。

std::vector <std::vector<color> > function()
{
std::vector <std::vector<color> > buffer (2*windowHeight, std::vector<color>(2*windowWidth));
std::cout<<"HI";
return buffer;
}

int main()
{
buffer = function();
std::cout<<"vector : "<<buffer[0][0].r; // now you should be fine to access buffer elements
}

关于c++ - 二维 vector 的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17961927/

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