erreur core dumped dans ma fonction

Le
Angelus
alors voila mon fichier laby.c:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define longueur 15
#define largeur 10
void initialisation (void);
void liberer2d(int***,int);
int **allouer2d(int,int);
int main (void){
initialisation();
return 0;
}

void initialisation (void){
int k,i,j,nbcaseAzero,x,y,d;
int **laby;
laby=allouer2d(longueur,largeur);
nbcaseAzero=1;
k=0;
for (i=0;i<longueur;i++){
for (j=0;j<largeur; j++){
if ((i%2!=0) && j%2!=0){
laby[i][j]=k;
k=k+1;
}
else laby[i][j]=-1;
}
}
while (nbcaseAzero<(longueur*largeur)){
x=(rand() % (longueur-2)+1);
y=(rand() % (largeur-2)+1);
while (laby[x][y]!=-1){
x=(rand() % (longueur-2)+1);
y=(rand() % (largeur-2)+1);}
if (i%2!=0){
d=laby[x][y-1]-laby[x][y+1];
if (d>0) {
laby[x][y]=laby[x][y+1];
/*fonction propager*/;
}
else if (d<0){
laby[x][y]=laby[x][y-1];
/*fonction propager*/;
}
}
else if (y%2!=0){
d=laby[x-1][y]-laby[x+1][y];
if (d>0) {
laby[x][y]=laby[x+1][y];
/*fonction propager*/;
}
else if (d<0){
laby[x][y]=laby[x-1][y];
/*fonction propager*/;
}
}
}
}

int **allouer2d(int l,int h){
int i, **t;
t=malloc(h*sizeof*t);
assert(t);
for (i=0;i<h;i++){
t[i]=malloc (l*sizeof*t[i]);
assert (t[i]);
}
return t;
}


void liberer2d(int*** q,int h){
int i;
for (i=0;i<h;i++)
free(*q);
*q=NULL;
}

alors lorsque je compile mon fichier avec gcc -Wall monfichier.c tous
ce passe bien.
Mais dés que je lance le a.out j'ai Erreur de segmentation (core
dumped)

lorsque je lance gbd comme ce-ci: gdb ./a.out core
j'obtiens cela
GNU gdb 6.6-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and
you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "i486-linux-gnu"
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.
1".

warning: exec file is newer than core file.

warning: Can't read pathname for load map: Input/output error.
Reading symbols from /lib/tls/i686/cmov/libc.so.6done.
Loaded symbols for /lib/tls/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x0804858c in initialisation ()
(gdb)

quand je met en commande where j'obtiens cela
#0 0x0804858c in initialisation ()
#1 0x0804850b in initialisation ()
#2 0xb7e56ebc in __libc_start_main () from /lib/tls/i686/cmov/libc.so.
6
#3 0x08048391 in _start ()

pourriez vous m'aidez svp
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Levenez
Le #994749
Le 25/05/07 21:08, dans

alors lorsque je compile mon fichier avec gcc -Wall monfichier.c tous
ce passe bien.


Compile avec -g pour voir où se trouve le plantage.

Mais dés que je lance le a.out j'ai Erreur de segmentation (core
dumped)

lorsque je lance gbd comme ce-ci: gdb ./a.out core
j'obtiens cela
GNU gdb 6.6-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and
you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "i486-linux-gnu"...
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.
1".

warning: exec file is newer than core file.


Pas normal ce warning

warning: Can't read pathname for load map: Input/output error.
Reading symbols from /lib/tls/i686/cmov/libc.so.6...done.
Loaded symbols for /lib/tls/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x0804858c in initialisation ()
(gdb)


Avec une compilation avec -g :

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x00002b98 in initialisation () at b.c:27
27 else laby[i][j]=-1;
(gdb) print i
$1 = 10
(gdb) print j
$2 = 0

J'ai comme l'impression que tu as inversé ligne et colonne dans ton
allocation.

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.

Angelus
Le #994748
merci beaucoup , effectivement j'avais inverser les lignes et colonnes
de mon allocation , maintenant sa marche ^^
Publicité
Poster une réponse
Anonyme