CoDe Dump

Me gustaria saber a que se deben exactamente esos errores que a veces se producen y que muestran en la pantalla un monton de numeros (supongo que direcciones de RAM) seguidos de una linea en la que pone CORE DUMP y despues mas numeros.
Es que tengo una aplicacion en la que hay un par de funciones que me producen estos errores y no le encuentro mas explicacion. Me gustaria saber cuando se producen para ver si eso me facilita encontrar el origen del problema.
Llevo tiempo viendo esto... es coDe dump o coRe dump?
Es Core Dump, y según mi profesor de SSOO es que el programa se ha metido un ostiaz* de p*ta madre [qmparto] [qmparto]

Realmente un core dump aparece porque un programa a finalizado anormalmete. Esto puede ser debido a mucho motivos (a mi se me han producido en creacion de procesos hijos, al acceder a posiciones no adecuadas de memoria compartida...), por eso si quieres pon el codigo a ver si te podemos echar una mano.


Saludossss
Error clásico de C bueno revisa bien el código
El CORE DUMP se produce cuando el sistema operativo detecta que una aplicación intenta acceder a direcciones de memoria no asignadas al proceso, etc. En estos casos lo que hace es grabar toda la memoria asignada al proceso además del estado de los registros del procesador, volcado de la pila etc. para que pueda ser depurado y analizar la causa del error.
Entonces este error probablemente se deba aque estoy intentando escribir o borrar sobre memoria que no he asignado, no?
Pues volvere a revisar porque eso era lo que yo sospechaba, pero revise el codigo y no encontre el error.

EDIT: he probado de nuevo, y ahora estoy seguro, es CODE DUMP, pero tengo un poco mas de informacion, de los numeros que me salen arriba puedo decir que creo que son registros del procesador grafico porque antes de cada numero pone GPRxx donde xx son numeros. luego pone lo que supongo que es el valor de ese registro en el momento del fallo.
technik escribió:Entonces este error probablemente se deba aque estoy intentando escribir o borrar sobre memoria que no he asignado, no?
Pues volvere a revisar porque eso era lo que yo sospechaba, pero revise el codigo y no encontre el error.

EDIT: he probado de nuevo, y ahora estoy seguro, es CODE DUMP, pero tengo un poco mas de informacion, de los numeros que me salen arriba puedo decir que creo que son registros del procesador grafico porque antes de cada numero pone GPRxx donde xx son numeros. luego pone lo que supongo que es el valor de ese registro en el momento del fallo.


Deberías publicar el código que te está fallando para ver porque no va [chiu]
A mi me daba con este codigo usando libfat:

char *towiisd;
towiisd = NULL;
sprintf(towiisd, "cosas");
fputs(towiisd, pFile);

Esta resumido, pero basicamente era eso, me hacia bien si usaba una sola vez sprintf i fputs, pero mas de una petaba no estoy muy seguro de porque...quiza por estar en un bucle, pero no se llegaba a escribir nada en el archivo.

Lo solucione usando fprintf en lugar de lo demas por si a alguien le interesa, aunque si alguien que realmente sepa programar me dice el fallo se lo agradezco xD

salu2

pd: obvimanete abria y cerraba el archivo xD
suloku escribió:A mi me daba con este codigo usando libfat:

char *towiisd;
towiisd = NULL;
sprintf(towiisd, "cosas");
fputs(towiisd, pFile);

Esta resumido, pero basicamente era eso, me hacia bien si usaba una sola vez sprintf i fputs, pero mas de una petaba no estoy muy seguro de porque...quiza por estar en un bucle, pero no se llegaba a escribir nada en el archivo.

Lo solucione usando fprintf en lugar de lo demas por si a alguien le interesa, aunque si alguien que realmente sepa programar me dice el fallo se lo agradezco xD

salu2

pd: obvimanete abria y cerraba el archivo xD


Pues el fallo es muy simple.

Primero, declaras un puntero, que no apunta a ningún sitio concreto.
Luego, le das la dirección NULL (0).
Y luego, intentas poner algún contenido en este puntero/cadena, el programa peta porque no tienes "derecho" a escribir en esta dirección de memoria.

Para solucionarlo, necesitas simplemente conseguir una zona de memoria, puedes hacer dos cosas:
- En vez de usar un puntero, usa un array:
char towiisd[500]; --> tienes 500 bytes de memoria


- Consigue un bloque de memoria con malloc() (esta es peor ya que luego deberias que usar free() para dejarlo libre, con arrays se libera automáticamente al terminar la función)
towiisd = malloc(500); --> tienes 500 bytes de memoria
9 respuestas