二维矢量的运行时错误
Runtime error for double dimensional vector
我在使用二维向量时遇到问题。在main()调用之前,我已经在头文件中将双向量声明为extern,并在main.cpp文件中再次声明(不是extern)。我调用一个函数来动态地将内存分配给双向量。给定的代码没有出现编译错误。但在运行时,如果访问矢量,它会给出一个矢量下标超出范围的异常。我使用调试器对其进行了检查,发现向量被分配了函数中的内存,但一旦它返回(超出函数范围),向量大小就会回到0。我已附上代码
color.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";
}
}
header.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
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";
}
您的函数调用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
}
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 分配给gslice_array会导致运行时错误
- cout 新创建的对象引发运行时错误
- 迭代二维矢量时发生运行时错误
- 如何在 Visual Studio C++ 11 中运行时定义二维数组?
- 二叉搜索树实现C++运行时错误
- 多维数组数据成员的运行时错误
- 二维矢量的运行时错误