Hola a todos,
sigo con mis practicas de mi carrerra, y se me ha presentado el siguiente problema. Tengo los siguientes codigos:
#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:
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:
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.