I'm doing a dinamic int vectors class in C++ for a school project. I have a problem with the "+" operator overloading that's meant to concatenate both vectors. I'm trying to run this code in the main.cpp:
#include <iostream>
#include "..\vectoresDinamicos\VectorEnteros.h"
using namespace std;
int main(){
int ve1[] = {1,2,3,4,5,6,7,8};
int ve2[] = {9,10,11,12,13};
VectorEnteros v1;
VectorEnteros v2(ve2,sizeof(ve2)/sizeof(ve2[0]));
VectorEnteros v3;
cout << v1.agregar(ve1,sizeof(ve1)/sizeof(ve1[0]))<<endl;
v3 = v1+v2;
//v3 = v3+14;
cout << v3 << endl;
return 0;
}
and the Class is defined as :
#include "VectorEnteros.h"
#define TAM_INT (sizeof(int))
VectorEnteros::VectorEnteros(){
cantElem=0;
vec=NULL;
}
VectorEnteros::~VectorEnteros(){
delete [] vec;
}
VectorEnteros::VectorEnteros(int* vec,unsigned cantElem){
this->vec = new int[cantElem];
memcpy(this->vec,vec,cantElem*TAM_INT);
this->cantElem=cantElem;
}
VectorEnteros::VectorEnteros(const VectorEnteros& vec1,const VectorEnteros vec2){
this->vec = new int[vec1.cantElem + vec2.cantElem];
memcpy(this->vec,vec1.vec,vec1.cantElem*TAM_INT);
memcpy(this->vec+vec1.cantElem*TAM_INT,vec2.vec,vec2.cantElem*TAM_INT);
this->cantElem = vec1.cantElem+vec2.cantElem;
}
VectorEnteros& VectorEnteros::agregar(int* vec, unsigned cantElem){
this->vec = (int*)realloc(this->vec,cantElem*TAM_INT + this->cantElem*TAM_INT);
memcpy(this->vec+this->cantElem*TAM_INT,vec,cantElem*TAM_INT);
this->cantElem +=cantElem;
return *this;
}
VectorEnteros VectorEnteros::operator +(const VectorEnteros& vec2){
return VectorEnteros(*this,vec2);
}
VectorEnteros VectorEnteros::operator +(const int num){
int vectorAux[this->cantElem + 1];
memcpy(&vectorAux[0], this->vec, this->cantElem*TAM_INT);
memcpy(&vectorAux[this->cantElem], &num, 1);
return VectorEnteros(vectorAux,this->cantElem+1);
}
ostream& operator <<(ostream& os,const VectorEnteros& vec){ // friend operator
unsigned i;
os << '[';
for(i=0;i<vec.cantElem-1;i++){
os << (*(vec.vec+i))<<", ";
}
os << (*(vec.vec+i))<<"]";
return os;
}
And the headers file is this (Sry for no putting it in the first place)
#ifndef VECTORENTEROS_H
#define VECTORENTEROS_H
#include <iostream>
using namespace std;
class VectorEnteros
{
public:
VectorEnteros();
~VectorEnteros();
VectorEnteros(const VectorEnteros& vec1,const VectorEnteros vec2);
VectorEnteros(int* vec,unsigned cantElem);
VectorEnteros& agregar(int* vec, unsigned cantElem);
VectorEnteros operator +(const VectorEnteros& vec2);
VectorEnteros operator +(const int num);
friend ostream& operator <<(ostream& os,const VectorEnteros& vec2);
protected:
private:
int* vec;
unsigned cantElem;
};
I don't really understand but by using a dbg i understand that maybe the destructor is called after the "+" operator and the object that's meant to go into "v3" and it's inner vectors are destroyed, so when i call the "<<" operator it's accessing freed memory so it crashes.
Does anyone have any explanation of what's really happening? (Sorry for the big chunck of code!!!)