Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - JulioRL8

#1
GNU/Linux / Duda bash de linux
7 Septiembre 2016, 00:33 AM
Hola buenas.
Estoy estudiando el bash de linux en mi carrera, y en los apuntes explican mal el como convertir ' en un caracter(ya que bash lo interpreta de uina manera especial tanto ' como $). Resulta que para escapar solamente hay que poner previamente '\'. Muy bien pues hago lo siguiente.

...$ echo 'En el libro de inglés aparece Peter'\''s cat'
'En el libro de inglés aparece Peter'''s cat'

Y esto es lo que me ocurre. Me salen 3 veces '. Por favor alguien me explique bien como se usa '\'.


#2
Programación C/C++ / Error de ejecucion
16 Junio 2016, 17:10 PM
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.
#3
Programación C/C++ / Re: Error de ejecucion
14 Junio 2016, 19:47 PM
Cita de: class_OpenGL en 14 Junio 2016, 18:10 PM
No sé muy bien cómo tenías planteado resolver el problema. Yo solo me voy a limitar a señalar el por qué te crashea el programa (segmentation fault). Este error se produce cuando intentas acceder a un área de la memoria que no está reservada para tu programa.

No sé el error exactamente pues no has puesto suficiente código, pero probablemente se esté produciendo porque no has inicializado correctamente la variable cabecera. En el constructor tendrías que haber hecho algo así:

Código (cpp) [Seleccionar]
Lista::Lista() {
    cabecera = NULL;
}


Y en la función insertar, algo así:

Código (cpp) [Seleccionar]
void insertar(string cadena){
    Celda *puntero;
    puntero = cabecera;
   
    if(NULL != puntero) { // Tienes que comprobar si hay datos o no
        while(NULL != puntero->siguiente)
            puntero = puntero->siguiente;
       
        puntero->siguiente = new Celda;
        puntero->siguiente->siguiente = NULL; // Tienes que inicializar
        puntero->sigueinte->datos = cadena;
    } else {
        cabecera = new Celda;
        cabecera->siguiente = NULL; // Tienes que inicializar
        cabecera->datos = cadena;
    }
}


Era exactamente eso. Muchas gracias!!!
#4
Programación C/C++ / Error de ejecucion
14 Junio 2016, 17:17 PM
Buenas, soy estudiante de primero de ingenieria informatica y tengo el siguiente problema. En el uso del siguiente metodo me sale un error que dice segmentation fault (core dumped). Creo entender que hago un mal uso de algun puntero y por eso me sale.

Este es el metodo:
Código (cpp) [Seleccionar]
void insertar(string cadena){
   Celda *puntero;
   puntero = cabecera;
   while(puntero->siguiente != 0){
       puntero = puntero->siguiente;
   }
   puntero->datos=cadena;
   puntero->siguiente= new Celda;
}


Y esta la clase y el struct que  se utiliza:
Código (cpp) [Seleccionar]
struct Celda{
string datos; ///valor de la celda actual
Celda * siguiente;  ///puntero al siguiente elemento de la lista
};

class Lista{

private:
  Celda * cabecera;
public:
//metodos...