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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Temas
Páginas: [1] 2
1  Programación / Programación C/C++ / C: liberar memoria: pointer being freed was not allocated en: 2 Enero 2018, 00:13 am
Hola,
me da este error:

error for object 0x7ff75ac027d8: pointer being freed was not allocated
* set a breakpoint in malloc_error_break to debug

El caso es que yo creo que es por culpa de esta matriz para la que reservo memoria:
Código
  1. int **matriz;
  2.    matriz = (int **) malloc(n * sizeof(int *));
  3.    for (i = 0; i < n; i++) {
  4.        matriz[i] = (int *) malloc(n * sizeof(int *));
  5.    }

pero hago un
Código
  1. free(matriz);
y no se por qué me sigue dando ese error.
Solo me da el error en mi Mac, pero si lo ejecuto en ubuntu no.

Gracias!

2  Programación / Programación C/C++ / ¿Como calcular la complejidad? en: 5 Diciembre 2017, 02:01 am
Hola,
para un trabajo de clase me piden calcular el número de pasos de una función recursiva y su complejidad, todo en el propio programa, y no sé muy bien cómo determinar los pasos. Si alguien me pudiese echar un cable, se lo agradecería.

¡Gracias!

Pd: en este caso el programa es en C, pero me interesa más el método de calcularlos que el propio código.
3  Programación / Programación C/C++ / Cömo detener búsqueda recursiva de un elemento en: 23 Septiembre 2017, 18:53 pm
Hola a todxs,
debo realizar un ejercicio para clase y hay una cosa que no tengo clara: pide explícitamente utilizar esta función void buscar(arbol A, elem dato, arbol *aux); para buscar un elemento de un árbol de letras (que no están ordenadas). El primer parámetro es el árbol dónde queremos buscar, el segundo el dato que se busca y el tercero un puntero que apunte a la posición del árbol donde se encuentra ese elemento.

Ahora bien, la función realiza su trabajo, pero quería saber si existe algún modo de detener la búsqueda cuando se haya encontrado el elemento y de que te avise si no lo ha encontrado. Al ser recursiva y de tipo void, no tengo claro como sería el procedimiento. Os dejo aquí mi función por si a alguien se le ocurre algo.

¡Muchas gracias, compañeros!

Código
  1. void buscar(arbol A, elem dato, arbol *aux){
  2.    elem E;
  3.    if(!esVacio(A)){
  4.        info(A,&E); // Miramos el contenido del nodo y lo almacenamos en la variable auxiliar E
  5.        if(E==dato){ // Si el dato del nodo coincide con el buscado...
  6.            *aux=A;
  7.        }
  8.        else{
  9.            buscar(izq(A),dato,aux);
  10.            buscar(der(A),dato,aux);
  11.        }
  12.    }
  13. }
4  Sistemas Operativos / Windows / Win10 "Error exception processing message" en: 22 Marzo 2017, 18:28 pm
Desde hace un par de días, Windows no me deja acceder a determinados programas (no muchos, la verdad), como WhatsApp. Pero tampoco me deja desinstalarlos, al instalar algunos nuevos me da un error de "imagen no encontrada", y si intento abrirlos varias veces, me aparece esto, que se abre en bucle y necesito reiniciar:

"Windows 10 - Error exception processing message 0xc000007b parameters 0x7ffb40e1d28 0xc0000428 0x7ffbf40e1d28 0x7ffbf40e1d28"

La semana pasada hice una partición con linux y se movieron los archivos de Windows, pero me funcionaba perfectamente todo. Y el lunes se actualizó windows, así que no sé si será problema de la actualización.
¿Qué puedo hacer antes de reinstalar?
Gracias!
5  Sistemas Operativos / Windows / W10 sube volumen a tope automaticamente en: 6 Febrero 2017, 00:01 am
Hola!
Tengo el siguiente problema:
si estoy reproduciendo alguna canción y pauso, al reanudar se pone el volumen a tope (o bien al cambiar de canción), dejándome sorda. Además, si le doy a subir o bajar volumen, sube a partir del punto que debería estar, y se "quita" el volumen máximo. El caso es que he probado de todo y no deja de hacerlo. Tengo el ordenador recién formateado con un disco duro nuevo, no sé si tendrá algún problema el controlador, pero en tal caso me gustaría saber cómo arreglarlo.
Gracias, espero haberme explicado.
6  Programación / Programación C/C++ / [C]: sumar cada fila de una matriz en: 18 Diciembre 2016, 00:17 am
Hola!
Necesito calcular la suma de cada fila de una matriz cuadrada tal que así, mediante punteros, pero la suma de las filas no funciona correctamente (me da un valor de más) y las columnas no las suma directamente.

     1       1       1   | 3
     1       1       1   | 3
     1       1       1   | 3
------- ------- -------
     3       3       3 

La matriz está declarada como una estructura con
typedef struct{
int filas;
int columnas;
int *datos;
}Matriz;

El código es el siguiente:
Código
  1. int sumarfilas(Matriz *m)
  2. {
  3.    int i,j,a,b,suma,vertical[i];
  4.    a=m->filas;
  5.    b=m->columnas;
  6. for(i=0;i<a;i++)
  7.    {
  8.    suma=0;
  9.        for(j=0;j<b;j++)
  10.        {
  11.            suma+=*(m->datos+i*b+j);
  12.        }
  13.        vertical[i]=suma;
  14.    }
  15. return vertical[i];
  16. }
  17. int sumarcolumnas(Matriz *m){
  18.    int c,f,a,b,vector[c];
  19.    a=m->filas;
  20.    b=m->columnas;
  21.    for(c=0;c<b;c++){ // por cada columna
  22.        for( f=0;f<a;f++) // por cada elemento de la columna
  23.        vector[c]+=*(m->datos+f*b+c);
  24.  
  25.    }
  26.    return vector[c];
  27. }

Gracias!
7  Programación / Programación C/C++ / Matriz dinamica en C [RESUELTO] en: 17 Diciembre 2016, 15:04 pm
Hola!
Quiero crear una matriz dinámica con funciones básicas.
Aquí solo hay una porción de código para guardar espacio, leer y escribir la matriz (soy consciente de que falta liberar la memoria y más cosas).
El caso es que no me funciona y creo que el fallo está en el modo de uso de punteros, pero no entiendo por qué. Si alguien me puede explicar por qué está mal, se lo agradezco mucho.
Gracias!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5.    int filas;
  6.    int columnas;
  7.    int *datos;
  8. }Matriz;
  9.  
  10. void CrearMatriz (Matriz *m, int f, int c){
  11.    m=(Matriz*)malloc(sizeof(Matriz));
  12.  
  13.    f=m->filas;
  14.    c=m->columnas;
  15.    m->datos=(int*)malloc(f*c*sizeof(int));
  16.  
  17.    if (m==NULL || m->datos==NULL){    
  18.        printf("Memoria insuficiente.\n");
  19.        exit(1);
  20.    }
  21. }
  22. void LeerMatriz(Matriz *m){
  23.    int i=0,j=0;
  24.    for(i=0; i<m->filas; i++)
  25.    {
  26.        for(j=0; j<m->columnas; j++)
  27.        {              
  28.            printf("Escriba o valor para M(%d,%d) = ",i+1,j+1);
  29.            scanf("%d",*(m->datos + i+j));
  30.        }
  31.    }
  32. }
  33.  
  34. void EscribirMatriz(Matriz *m){
  35.    int i=0,j=0;
  36.  
  37.    printf("\n\tLa matriz es: "); /*RUTINA PARA IMPRIMIR*/
  38.    for(i=0;i<m->filas;i++){
  39.        printf("\n\t");
  40.        for(j=0;j<m->columnas;j++){
  41.            printf("  %d  ", *(m->datos+i)+j); //M[i][j]
  42.            }
  43.    }
  44. }
  45.  
  46. void TransponerMatriz(Matriz *m){
  47.    int i=0,j=0;
  48.  
  49.    printf("\n\n\tLa transpuesta es: ");/*IMPRIMIR MATRIZ TRANSPUESTA*/
  50.    for(i=0;i<m->columnas;i++){
  51.        printf("\n\t");
  52.        for(j=0;j<m->filas;j++){
  53.            printf("  %d  ", *(m->datos+i+j)); //M[j][i]
  54.            }
  55.    }
  56. }
  57. int main(){
  58.    Matriz m;
  59.  
  60.    printf("Introduzca numero de filas: ");
  61.    scanf("%d",&m.filas);
  62.    printf("Introduzca numero de columnas: ");
  63.    scanf("%d", &m.columnas);
  64.  
  65.    CrearMatriz(&m,m.filas,m.columnas);
  66.    LerMatriz(&m);
  67.    EscribirMatriz(&m);
  68.    TransponerMatriz(&m);
  69.    return 0;
  70. }
8  Programación / Programación C/C++ / [C]: Scanf punteros (como si fuese P[i][j]) en: 17 Diciembre 2016, 11:07 am
Hola,
tengo una matriz definida con estructuras tal que
Código
  1. typedef struct{
  2.    int filas;
  3.    int columnas;
  4.    int *datos; //**
  5. }Matriz;

El caso es que después necesito leer los datos de la matriz, y quiero escanearlos en lo que sería equivalente en un array bidimensional M[fila][columna].

El código sería este:
Mi duda es, en el scanf, para hacerlo correctamente con punteros (también teniendo en cuenta de que pedimos el valor para la posición i+1, aunque deberíamos escanearlo en la 0,0).

Gracias!

Posdata: alguien me puede explicar por qué en la estructura definimos el entero *datos, o sea, que uso se le da?

Código
  1. void LerMatriz(Matriz *m)
  2. {
  3.    int i=0,j=0;
  4.  
  5.    for(i=0; i<m->filas; i++)
  6.    {
  7.        for(j=0; j<m->columnas; j++)
  8.       {              
  9.            printf("Valor para M(%d,%d) = ",i+1,j+1);
  10.            scanf("%d",*((m+i)+j)); //AQUI ES DONDE NO SE COMO PONERLO
  11.       }
  12.    }
  13. }
9  Programación / Programación C/C++ / [C]: problema punteros y archivos en: 26 Noviembre 2016, 23:01 pm
Hola, me piden que indique el nombre de un archivo (será el nombre del mes) que contiene un formato así:
Mes
Ciudad
12 15 rojo (temperatura min, max y nivel de alerta).
El caso es que el programa debe determinar cuantos dias tiene el mes para saber si es correcto o no y trabajar haciendo la media, moda y tal a partir de ese dato, reservando memoria dinamica para tal. El caso es que no consigo hacerlo funcionar. Sé que tiene algun error suelto, pero no sé identificarlos, y me estoy estresando. Además, he oído que se debe de hacer teniendo en cuenta el argv y argc pero no sé implementarlos en el programa.
Muchas gracias por leer esto, se agradece.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /*FUNCION PARA CONTABILIZAR OS DIAS DO MES*/
  6. int seleccionar(char *mes)  {
  7.    int i=0,c;
  8.  
  9.    char meses[12][10] = {"xaneiro","febreiro","marzo","abril","maio","xunho","xullo","agosto","setembro","outubro","novembro","decembro"};
  10.    int diasmes[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
  11.  
  12.    for (i=0; i<12; i++) {
  13.        c=strcmp(mes,diasmes[i]);
  14.        if (c==0) {
  15.            break;
  16.        }
  17.        else if (i==11 && c!=0) {
  18.            printf("O mes e incorrecto, recorde que debe usar minusculas.\n");
  19.            sleep(5);
  20.            exit(0);
  21.        }
  22.    }
  23.    return diasmes[i];
  24. }
  25.  
  26. /*FUNCION CALCULO DA MEDIA*/
  27. float media(int vector[]){
  28.    float resultado;
  29.    int media=0;
  30.    int i;
  31.    for(i=0;i<32;i++){
  32.        media=vector[i]+media;
  33.    }
  34.    resultado=media/i;
  35.    return(resultado);
  36. }
  37.  
  38. /*FUNCION CALCULO DA MODA*/
  39. char moda(int amar,int naran,int rojo){
  40.    int res;
  41.  
  42.    if(amar>naran&&amar>rojo){
  43.        res=1;
  44.    }
  45.    else if(naran>amar&&naran>rojo){
  46.        res=2;
  47.    }
  48.    else if(rojo>amar&&rojo>naran){
  49.        res=3;
  50.    }
  51.    else if(amar==naran&&amar!=rojo){
  52.        res=4;
  53.    }
  54.    else if(amar==rojo&&amar!=naran){
  55.        res=5;
  56.    }
  57.    else if(naran==rojo&&naran!=amar){
  58.        res=6;
  59.    }
  60.    else if(amar==naran&&amar==rojo&&naran==rojo){
  61.        res=7;
  62.    }
  63.    return(res);
  64. }
  65.  
  66. int main(int argc, char** argv[]) {
  67.    int i=0;
  68.    int x;
  69.    int amarillo,amarillo1=0,naranja,naranja1=0,rojo,rojo1=0;
  70.    float minimo,maximo;
  71.    int mod;    
  72.  
  73.    char mes[10];
  74.    char cidade[10];
  75.    float *minimadias;
  76.    float *maximadias;
  77.    char *riscodias;
  78.  
  79.    minimadias=(float*)malloc(sizeof(float));
  80.    maximadias=(float*)malloc(sizeof(float));
  81.    riscodias=(char*)malloc(sizeof(char));
  82.  
  83.    FILE *fp;
  84.    char nombreOrg[50];
  85.    printf("Indique o nome do arquivo que desea abrir (): ");
  86.    scanf("%s",nombreOrg);
  87.    if((fp=fopen(nombreOrg, "r"))==NULL){
  88.        printf("O archivo non pode ser aberto.\n");
  89.        exit(1);
  90.    }
  91.    x=nombreOrg(seleccionar);
  92.    printf("%d",x);
  93.    {
  94.        fscanf(fp,"%s",&mes);
  95.        fscanf(fp,"%s",&cidade);
  96.  
  97.        while(feof(fp)==0){
  98.        //printf("%d\n",argc);
  99.        fscanf(fp,"%d",(minimadias+i));
  100.        fscanf(fp,"%d",(maximadias+i));
  101.        fscanf(fp,"%s",(riscodias+i));
  102.        }
  103.    }
  104.    {
  105.            amarillo=strcmp(riscodias,"amarillo");
  106.            naranja=strcmp(riscodias,"naranja");
  107.            rojo=strcmp(riscodias,"rojo");
  108.            if(amarillo==0){
  109.                amarillo1++;
  110.            }
  111.            else if(naranja==0){
  112.                naranja1++;
  113.            }
  114.            else if (rojo==0){
  115.                rojo1++;
  116.            }
  117.            i++;
  118.        }
  119.  
  120.    FILE *fp1;
  121.    fp1=fopen("salida4.txt","w");  /*Abrimos o ficheiro salida9.txt*/
  122.        if(fp1==NULL){
  123.        printf("O archivo non pode ser aberto.\n");
  124.        exit(1);
  125.    }
  126.    {  
  127.        minimo=media(minimadias);
  128.        maximo=media(maximadias);
  129.        fprintf(fp1,"O mes e %s.\n",mes);
  130.        fprintf(fp1,"A cidade e %s.\n",cidade);
  131.        fprintf(fp1,"A media das temperaturas minimas e %.2f.\n",minimo);
  132.        fprintf(fp1,"A media das temperaturas maximas e %.2f.\n",maximo);
  133.        mod=moda(amarillo1,naranja1,rojo1);
  134.  
  135.        if(mod==1){
  136.            fprintf(fp1,"%s","O nivel de risco mais repetido foi amarillo.");
  137.        }
  138.        else if(mod==2){
  139.            fprintf(fp1,"%s","O nivel de risco mais repetido foi naranja.");
  140.        }
  141.        else if(mod==3){
  142.            fprintf(fp1,"%s","O nivel de risco mais repetido foi rojo.");
  143.        }
  144.        else if(mod=4){
  145.            fprintf(fp1,"%s","O nivel de risco mais repetido foi amarillo/naranja.");
  146.        }
  147.        else if(mod==5){
  148.            fprintf(fp1,"%s","O nivel de risco mais repetido foi amarillo/rojo.");
  149.        }
  150.        else if(mod==6){
  151.            fprintf(fp1,"%s","O nivel de risco mais repetido foi naranja/rojo.");
  152.        }
  153.        else if(mod==7){
  154.            fprintf(fp1,"%s","O nivel de risco mais repetido e indeterminado.");
  155.        }
  156.    }
  157.  
  158.    fclose(fp);
  159.    fclose(fp1);
  160.    free(maximodias);
  161.    free(minimadias);
  162.    free(riscodias);
  163. }
10  Programación / Programación C/C++ / [C] Ayuda: introducir enteros y devolverlos como puntero en: 26 Noviembre 2016, 19:35 pm
Necesito introducir cuatro enteros y transformarlos en una IP normal que devuelva un puntero a char.
El caso es que no sé que falla en el programa.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char *IP(int d1, int d2, int d3, int d4){
  5.    char *dir;
  6.  
  7.    dir=(char*)malloc(sizeof(char));
  8.    if (d1>255 || d2>255 || d3>255 || d4>255){
  9.        sprintf(*dir,"Error: os datos introducidos son incorrectos");
  10.        exit(1);
  11.    }
  12.    else {
  13.        sprintf(*dir,"%d.%d.%d.%d",d1,d2,d4,d4);
  14.    }
  15.  
  16.    return dir;
  17. }
  18.  
  19.  
  20. main(){
  21.    int a,b,c,d;
  22.  
  23.    printf("Inserte 1 campo: ");
  24.    scanf("%d",&a);
  25.    printf("Inserte 2 campo: ");
  26.    scanf("%d",&b);
  27.    printf("Inserte 3 campo: ");
  28.    scanf("%d",&c);
  29.    printf("Inserte 4 campo: ");
  30.    scanf("%d",&d);
  31.  
  32.    *IP(a,b,c,d);
  33.    puts(*IP);
  34.  
  35.    return(0);
  36. }
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines