elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: [1]
1  Sistemas Operativos / GNU/Linux / Duda bash de linux en: 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 / Programación C/C++ / Error de ejecucion en: 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
  1. #include <iostream>
  2. #include "imagen.h"
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[]){
  8.    Imagen uno, dos, salida;
  9.  
  10.    if(argc==5){
  11.        cout << "1" << endl;
  12.        uno.leerImagen(argv[1]);
  13.        dos.leerImagen(argv[2]);
  14.        cout << "2" << endl;
  15.        salida = uno + dos;
  16.        cout << "3" << endl;
  17.        if(argv[4] == "t"){
  18.            cout << "4" << endl;
  19.            ofstream sal;
  20.            sal.open(argv[3]);
  21.            for(int i=0; i<= salida.filas(); i++){
  22.                for(int j=0; j<= salida.columnas(); j++){
  23.                    sal << salida.get(i, j);
  24.                }
  25.                sal << endl;
  26.            }
  27.        }
  28.        if(argv[4] == "b"){
  29.            cout << "5" << endl;
  30.            fstream sal(argv[3], ios::out | ios::binary);
  31.  
  32.            for(int i=0; i<= salida.filas(); i++){
  33.                for(int j=0; j<= salida.columnas(); j++){
  34.                    sal.put(salida.get(i, j));
  35.                }
  36.                sal.put('\n');
  37.            }
  38.  
  39.        }
  40.    }
  41.    else{
  42.        cout << "Error: la forma de usar este programa es: <ejecucion> <imagen1> <imagen2> <imagen_salida> <t(texto) o b(binario)> " << endl;
  43.    }
  44.  
  45. }

A continuación la clase Imagen con los métodos que necesito en el código anterior:

Código
  1. class Imagen{
  2. private:
  3.   byte *datos;  ///< datos de la imagen
  4.   int nfilas; ///< número de filas de la imagen
  5.   int ncolumnas;
  6. public:
  7.  
  8. void Imagen::set(int y, int x, byte v)
  9. {
  10. int i = y * ncolumnas + x;
  11.  
  12. datos[i] = v;
  13. }
  14.  
  15. byte Imagen::get(int y, int x) const
  16. {
  17. int i = y * ncolumnas + x;
  18.  
  19. return datos[i];
  20. }
  21.  
  22. Imagen& Imagen::operator=(const Imagen &otra){
  23.    if(&otra != this){
  24.        cout << "=1" << endl;
  25.        this->nfilas = otra.nfilas;
  26.        cout << "=2" << endl;
  27.        this->ncolumnas= otra.ncolumnas;
  28.        cout << "=3" << endl;
  29.        this->datos = otra.datos;}
  30.    cout << "=4" << endl;
  31.    return *this;
  32.    cout << "=5" << endl;
  33. }
  34.  
  35. Imagen Imagen::operator+(const Imagen &otra){
  36.    Imagen salida;
  37.  
  38.    cout << "+1" << endl;
  39.    salida.nfilas= ncolumnas + otra.ncolumnas;
  40.    if(otra.nfilas > nfilas){
  41.        salida.nfilas= otra.nfilas;
  42.    }
  43.    else{ salida.nfilas= nfilas;}
  44.  
  45.    cout << "+2" << endl;
  46.    salida.datos= new byte [salida.nfilas * salida.ncolumnas];
  47.    cout << "+3" << endl;
  48.    //Inicializar a 0 todos los valores
  49.    for(int c=0; c<= salida.nfilas * salida.ncolumnas; c++ ){
  50.        setPos(c, 0);
  51.    }
  52.    cout << "+4" << endl;
  53.    //Meter primera imagen
  54.    for(int i=0; i<=nfilas; i++){
  55.        for(int j=0; j<=ncolumnas; j++){
  56.            salida.set(i, j, get(i,j));
  57.        }
  58.    }
  59.    cout << "+5" << endl;
  60.    //Meter segunda imagen
  61.    for(int u=nfilas+1; u<= nfilas+otra.nfilas; u++){
  62.        for(int d=ncolumnas+1; d<= ncolumnas + otra.ncolumnas; d++){
  63.            salida.set(u, d, otra.get(u,d));
  64.        }
  65.    }
  66.    cout << "+6" << endl;
  67.    return salida;
  68.    cout << "+7" << endl;
  69. }

La salida al ejecutarlo en consola( con los couts para orientar ) es:
Código
  1. 1
  2. 2
  3. +1
  4. +2
  5. +3
  6. +4
  7. +5
  8. +6
  9. =1
  10. =2
  11. =3
  12. =4
  13. *** Error in `bin/suma': free(): invalid next size (fast): 0x090590f8 ***
  14. Aborted (core dumped)

Gracias de antemano a cualquier ayuda que surja.
3  Programación / Programación C/C++ / Re: Error de ejecucion en: 14 Junio 2016, 19:47 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
  1. Lista::Lista() {
  2.    cabecera = NULL;
  3. }


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

Código
  1. void insertar(string cadena){
  2.    Celda *puntero;
  3.    puntero = cabecera;
  4.  
  5.    if(NULL != puntero) { // Tienes que comprobar si hay datos o no
  6.        while(NULL != puntero->siguiente)
  7.            puntero = puntero->siguiente;
  8.  
  9.        puntero->siguiente = new Celda;
  10.        puntero->siguiente->siguiente = NULL; // Tienes que inicializar
  11.        puntero->sigueinte->datos = cadena;
  12.    } else {
  13.        cabecera = new Celda;
  14.        cabecera->siguiente = NULL; // Tienes que inicializar
  15.        cabecera->datos = cadena;
  16.    }
  17. }

Era exactamente eso. Muchas gracias!!!
4  Programación / Programación C/C++ / Error de ejecucion en: 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
  1. void insertar(string cadena){
  2.    Celda *puntero;
  3.    puntero = cabecera;
  4.    while(puntero->siguiente != 0){
  5.        puntero = puntero->siguiente;
  6.    }
  7.    puntero->datos=cadena;
  8.    puntero->siguiente= new Celda;
  9. }

Y esta la clase y el struct que  se utiliza:
Código
  1. struct Celda{
  2. string datos; ///valor de la celda actual
  3. Celda * siguiente;  ///puntero al siguiente elemento de la lista
  4. };
  5.  
  6. class Lista{
  7.  
  8. private:
  9.   Celda * cabecera;
  10. public:
  11. //metodos...
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines