My function zeroPadding
has more options but I put only two because they're important for this example. When I debug the main()
function I got this error
Access violation reading location 0xCCCCCCCC
Why?
This is from the class Signal
just to show what the constructor calls
template <class T> Signal<T>::Signal(int width,int height){
N=width;
M=height;
sig2D= new int*[N];
for(int i=0;i<N;i++){
sig2D[i]=new int[M];
}
t0=0;
deltaT=1;
for (int i=0;i<N;i++)
for (int j=0;j<M;j++){
sig2D[i][j]=t0+j*deltaT;
}
}
template <class T> Image<T>::Image(int width,int height): Signal(width,height) {}
template <class T> Image<T> Image<T>::zeroPadding(Image<T> im2){
Signal<T> s1= static_cast<Signal<T>>(*this);
Signal<T> s2= static_cast<Signal<T>>(im2);
int *temp=new int[15];
for(int i=0;i<15;i++){
temp[i]=0;
}
if(s1.getWidth()>s2.getWidth() && s1.getHeight()==s2.getHeight()){
im2.setWidth(s1.getWidth());
im2.sig2D=new T*[im2.getWidth()];
for(int i=0;i<im2.getWidth();i++){
im2.sig2D[i]=new T[im2.getHeight()];
}
for (int i=s2.getWidth();i<s1.getWidth();i++)
for(int j=0;j<s2.getHeight();j++){
im2.sig2D[i][j]=temp[j];
}
return im2;
}
else if(s1.getHeight()<s2.getHeight() && s1.getWidth()>s2.getWidth()){
setHeight(s2.getHeight());
sig2D=new T*[getWidth()];
for(int i=0;i<getWidth();i++){
sig2D[i]=new T[getHeight()];
}
for (int i=0;i<s1.getWidth();i++)
for(int j=s1.getHeight();j<s2.getHeight();j++){
sig2D[i][j]=temp[j];
}
(*this).zeroPadding(im2);
}
}
template <class T> Image<T> Image<T>::addImage(Image<T> im2){
Image<T> *r=new Image(80,80);
if ((*this).getWidth()==im2.getWidth() && (*this).getHeight()==im2.getHeight()) {
//r=new Image(im2.getWidth(),im2.getHeight());
for (int i=0;i<im2.getWidth();i++){
for(int j=0;j<im2.getHeight();j++)
(*r).sig2D[i][j]= (*this).sig2D[i][j]+im2.sig2D[i][j];
}
return(*r);
}
else {
(*r)= zeroPadding(im2); // here breaks why?
addImage(*r);
}
int main() {
Image<int> *a= new Image<int>(5,6);
Image<int> *b= new Image<int>(4,7);
(*a).addImage(*b);
return 0;
}