[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux] [devel] Petit soucis avec C.



Merci,

Effectivement, je n'avais rien compris : amalgame pointeurs, definition et 
allocation de memoire.  J'y vois plus clair maintenant.
Merci aussi pour l'explication concernant "Abandon".  Je ne voyais vraiment 
pas de quoi il s'agissait.  Pour ce qui est de "gdb", encore 3 chapitres de 
mon bouquin et j'y arrive ;-)

Philippe

Le Dimanche  1 Juillet 2001 13:13, linux a écrit :
> Le 30/06/2001 à 16:45 CHARLIER Philippe a écrit :
> >Bonjour a tous,
> >
> >Je suis toujours en train d'essayer de comprendre le C (sous Linux
> >off-course).  J'ai quelques soucis avec les pointeurs :-).
> >
> >J'ai ecrit le pgm suivant, pour un peu voir comment cela fonctionne :
> >
> >----------------------------------------------------
> >#include <stdio.h>
> >
> >int main (int argc, char **argv)
> >{
> >	char **p_char;
> >	char *pointeur;
> >	int i;
> >
> >	*p_char = "Bonjour";
> >	*(p_char + 1) = "Hello";
> >	*(p_char + 2) = "Goeiedag";
> >
> >	for ( i=0; i <= 2; i++)
> >	{
> >		pointeur = *(p_char + i);
> >
> >		printf("Affichage de *(pchar+%d) : %s.\n", i, pointeur );
> >	}
> >
> >	printf("test.\n");
> >
> >	return 0;
> >}
> >----------------------------------------------------
> >
> >Le programme une fois execute me sort ceci :
> >
> >Affichage de *(pchar+0) : Bonjour.
> >Affichage de *(pchar+1) : Hello.
> >Affichage de *(pchar+2) : Goeiedag.
> >test.
> >Abandon
> >
> >???????? D'ou vient ce "Abandon" ???????
>
> Bonjour,
>
>
> Ce programme n'est vraiment pas terrible
> mauvaise utilisation des pointeurs
>
> >	*p_char = "Bonjour";
> >	*(p_char + 1) = "Hello";
> >	*(p_char + 2) = "Goeiedag";
>
> tu ne peux pas faire ça
> tu remplis la mémoire sans avoir allouer de la place
> tu n'as alloué que de la place que pour un pointeur *p_char
> mais rien pour le reste du tableau de pointeur.
>
> ceci provoque une corruption d'adresse mémoire
> ce qui fait que ton process plante avec un SIGABRT d'où le "Abandon"
> regarde avec un debugger :
>
> 24      }
> (gdb)
> 0x400410de in __libc_start_main () from /lib/libc.so.6
> (gdb)
> Single stepping until exit from function __libc_start_main,
> which has no line number information.
>
> Program received signal SIGABRT, Aborted.
> 0x40051d11 in kill () from /lib/libc.so.6
> (gdb) backtrace
> #0  0x40051d11 in kill () from /lib/libc.so.6
> #1  0x40051b15 in raise () from /lib/libc.so.6
> #2  0x40053143 in abort () from /lib/libc.so.6
> #3  0x40136038 in __deregister_frame_info () from /lib/libc.so.6
>
> @++
> nico

[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
[ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]