C++ 二维向量的运行时误差

C++ 二维向量的运行时误差,c++,vector,runtime,C++,Vector,Runtime,我在使用二维向量时遇到了一个问题。在main()调用之前,我在头文件中将双向量声明为extern,并在main.cpp文件中再次声明(不是作为extern)。我调用一个函数来动态地将内存分配给双向量。给定的代码没有编译错误。但在运行时,如果访问向量,它会给出一个向量下标超出范围的异常。我使用我的调试器检查了它,发现该向量在函数中分配了内存,但一旦它返回(超出函数范围),向量大小就会返回到0。 我已附上密码 颜色。h: #ifndef __COLOR__ #define __COLOR__ cl

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

颜色。h:

#ifndef __COLOR__
#define __COLOR__

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

        color(void);
        color(int R, int G,int B);
    };
#endif
color.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";
    }
}
main.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";
}
#包括“header.h”
向量缓冲区;
真空总管(真空){
//myClass obj=myClass(1,4);
功能(/*obj*/);

std::cout您的函数调用
function()
对main.cpp中定义的变量
buffer
没有副作用。因此,在您的主函数中,它尝试访问它将导致未定义的行为

如果希望让
function()
修改全局
buffer
变量,可以让
function()
返回向量

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
}
std::vector function()
{
std::vector缓冲区(2*窗高,std::vector(2*窗宽));
标准::cout
#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";
}
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
}