sigo con mis practicas de mi carrerra, y se me ha presentado el siguiente problema. Tengo los siguientes codigos:
Código
#include <iostream> #include "imagen.h" #include <fstream> using namespace std; int main(int argc, char *argv[]){ Imagen uno, dos, salida; if(argc==5){ cout << "1" << endl; uno.leerImagen(argv[1]); dos.leerImagen(argv[2]); cout << "2" << endl; salida = uno + dos; cout << "3" << endl; if(argv[4] == "t"){ cout << "4" << endl; ofstream sal; sal.open(argv[3]); for(int i=0; i<= salida.filas(); i++){ for(int j=0; j<= salida.columnas(); j++){ sal << salida.get(i, j); } sal << endl; } } if(argv[4] == "b"){ cout << "5" << endl; fstream sal(argv[3], ios::out | ios::binary); for(int i=0; i<= salida.filas(); i++){ for(int j=0; j<= salida.columnas(); j++){ sal.put(salida.get(i, j)); } sal.put('\n'); } } } else{ cout << "Error: la forma de usar este programa es: <ejecucion> <imagen1> <imagen2> <imagen_salida> <t(texto) o b(binario)> " << endl; } }
A continuación la clase Imagen con los métodos que necesito en el código anterior:
Código
class Imagen{ private: byte *datos; ///< datos de la imagen int nfilas; ///< número de filas de la imagen int ncolumnas; public: void Imagen::set(int y, int x, byte v) { int i = y * ncolumnas + x; datos[i] = v; } byte Imagen::get(int y, int x) const { int i = y * ncolumnas + x; return datos[i]; } Imagen& Imagen::operator=(const Imagen &otra){ if(&otra != this){ cout << "=1" << endl; this->nfilas = otra.nfilas; cout << "=2" << endl; this->ncolumnas= otra.ncolumnas; cout << "=3" << endl; this->datos = otra.datos;} cout << "=4" << endl; return *this; cout << "=5" << endl; } Imagen Imagen::operator+(const Imagen &otra){ Imagen salida; cout << "+1" << endl; salida.nfilas= ncolumnas + otra.ncolumnas; if(otra.nfilas > nfilas){ salida.nfilas= otra.nfilas; } else{ salida.nfilas= nfilas;} cout << "+2" << endl; salida.datos= new byte [salida.nfilas * salida.ncolumnas]; cout << "+3" << endl; //Inicializar a 0 todos los valores for(int c=0; c<= salida.nfilas * salida.ncolumnas; c++ ){ setPos(c, 0); } cout << "+4" << endl; //Meter primera imagen for(int i=0; i<=nfilas; i++){ for(int j=0; j<=ncolumnas; j++){ salida.set(i, j, get(i,j)); } } cout << "+5" << endl; //Meter segunda imagen for(int u=nfilas+1; u<= nfilas+otra.nfilas; u++){ for(int d=ncolumnas+1; d<= ncolumnas + otra.ncolumnas; d++){ salida.set(u, d, otra.get(u,d)); } } cout << "+6" << endl; return salida; cout << "+7" << endl; }
La salida al ejecutarlo en consola( con los couts para orientar ) es:
Código
1 2 +1 +2 +3 +4 +5 +6 =1 =2 =3 =4 *** Error in `bin/suma': free(): invalid next size (fast): 0x090590f8 *** Aborted (core dumped)
Gracias de antemano a cualquier ayuda que surja.