Fecha y hora actual: Lunes 23 Sep 2019 11:54
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Problema con TDA, printf se carga el apuntador a void

Responder al Tema

Índice del Foro > C, C#, Visual C++ > Problema con TDA, printf se carga el apuntador a void

Autor Mensaje
Kazerolo



Registrado: 29 Mar 2013
Mensajes: 1

Mensaje Publicado: Viernes 29 Mar 2013 14:52

Título del mensaje: Problema con TDA, printf se carga el apuntador a void

Responder citando

hola amigos, este es el primer post que hago en este foro.

El caso es que estoy haciendo un programilla muy sencillo para las practicas de la universidad, en el que defino un tipo abstracto de datos.

Este tipo de datos es el tipo Array, usado para almacenar arrays de numeros enteros, indexados de 1 a n, en vez del habitual 0 a n-1. tambien almaceno el tamaño del array en otro campo.

os copio la parte que importa de codigo de array.h y array.c

ARRAY.H

Código:
  1.  
  2. #ifndef Array
  3. #define Array
  4.  
  5. typedef void* array;
  6.  
  7. array crealeatorio( int , int);
  8.  
  9. void arrayimprime(array );
  10.  
  11. #endif
  12.  
  13.  



ARRAY.C

Código:
  1.  
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <string.h>
  6. #include <enteroaleatorio.h>
  7. #include <array.h>
  8.  
  9. typedef struct {
  10. int* v;
  11. int n;
  12. }arrayRep ;
  13.  
  14. typedef arrayRep* arrayAp;
  15.  
  16. array crealeatorio( int linf, int lsup){
  17. /**/
  18. arrayRep aux;
  19. aux.n = lsup - linf + 1;
  20. aux.v = malloc(sizeof(int)* aux.n);
  21. /**/
  22.  
  23.  
  24.  
  25.  
  26. for(int i = 0; i < aux.n;i++)
  27. aux.v[i]=linf+i;
  28.  
  29.  
  30. for (int j=0; j<= aux.n-2; j++){
  31. int k = enteroaleatorio(j+1, aux.n-1); //esto devuelve entero aleatorio
  32. int x=aux.v[j];
  33. aux.v[j]=aux.v[k];
  34. aux.v[k]=x;
  35.  
  36. }
  37.  
  38.  
  39. /**/
  40. arrayAp auxAp = &aux;
  41. return auxAp;
  42. /**/
  43. }
  44.  
  45. void arrayimprime(array a){
  46. /**/
  47. arrayAp auxAp = a;
  48.  
  49.  
  50. for(int i=0; i<auxAp->n;i++)
  51. printf("%d\n", auxAp->v[i]);
  52. /**/
  53. }
  54.  


el problema viene cuando en un programa usuario del TDA hago lo siguiente

PRINCIPAL.C

Código:
  1.  
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <string.h>
  6. #include <array.h>
  7. #include <enteroaleatorio.h>
  8.  
  9.  
  10.  
  11.  
  12. int main()
  13. {
  14. int linf=0;
  15. int lsup=0;
  16. int ernd=0;
  17. int opcion;
  18.  
  19. srand(time(NULL));
  20.  
  21. array arrayActual = crealeatorio(1,10);
  22.  
  23. arrayimprime(arrayActual);
  24.  
  25. arrayimprime(arrayActual);
  26.  
  27. printf("a");
  28.  
  29. arrayimprime(arrayActual);
  30.  
  31. return 0;
  32. }
  33.  
  34.  


y he aqui donde viene mi problema, las dos primeras veces que llamo a arrayimprime(arrayActual) , se imprime sin ningun tipo de problema, pero el mero hecho de usar un printf, o scanf en el programa principal, hace que todo salga de madre.

La propia funcion arrayimprime, lleva un printf como es obvio, pero este no afecta al buen comportamiento del programa.

Dado que soy un poco nuevo con punteros, direcciones de memoria, y el malloc, no se si estoy haciendo alguna barbaridad, pero a mi me parece estar todo bien hecho.

Si alguien pudiera decirme algo sobre como solucionar este problema, estaria muy agradecido

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Desarrollar problema vb.net

Dav2k6 Visual Basic .NET 0 Miércoles 03 Jul 2019 09:12 Ver último mensaje
El foro no contiene ningún mensaje nuevo

printf("Hola");

JohnManuel Preséntate a la comunidad 2 Viernes 07 Jun 2019 20:34 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Problema con mostrar datos en JTable con Iterat...

mariaelhacker Java 0 Lunes 11 Mar 2019 13:25 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Velocidad de carga

satrisua Hosting 2 Viernes 08 Feb 2019 13:31 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Problema con el archivo .htaccess

P3p3 Temas generales 3 Domingo 18 Feb 2018 23:35 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,