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

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

css - Firefox for ubuntu renders wrong colors -