c++ - Runtime error for double dimensional vector -
i have problem using double dimensional vectors. have declared double vector extern in header file , again (not extern) in main.cpp file before main() call. call upon function dynamically allocate memory double vector. given code gives no compilation error. @ runtime if access vector, gives vector subscript out of range exception. checked using debugger , found vector allocated memory in function, comes (out of function scope) vector size goes 0. have attached code
color.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"; } }
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__
color.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"; }
your function call function()
has no side-affect on variable buffer
defined in main.cpp. in main function tries access cause undefined behavior.
if intent let function()
modify global buffer
variable, let function()
return 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; // should fine access buffer elements }
Comments
Post a Comment