Error de ejecucion

Iniciado por JulioRL8, 16 Junio 2016, 17:10 PM

0 Miembros y 1 Visitante están viendo este tema.

JulioRL8

Hola a todos,
sigo con mis practicas de mi carrerra, y se me ha presentado el siguiente problema. Tengo los siguientes codigos:

Código (cpp) [Seleccionar]
#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 (cpp) [Seleccionar]
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 (bash) [Seleccionar]
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.