j'ai une question sur realloc:
$ cat testrealloc.c
#include <stdio.h>
#include <stdlib.h>
int main(void){
char * c=NULL;
c=malloc(8);
if (c == NULL) return -1;
c="abcdefgh";
printf("valeur du pointeur: %d\r\n",c);
printf("valeur de c: %s\r\n",c);
c=realloc(c,16);
return 0;
}
$ gcc -Wall -o testrealloc testrealloc.c
testrealloc.c: In function 'main':
testrealloc.c:9: attention : format '%d' expects type 'int', but argument 2
has type 'char *'
$ ./testrealloc
valeur du pointeur: 134514000
valeur de c: abcdefgh
Erreur de segmentation
Ma question est: pourquoi le realloc segfaulte?
Merci
--
Kevin
quel est le statut et la valeur de &i lors de la compilation ?
Ca depend s'il y a &i ou non dans ton code...
espie
In article , Pascal J. Bourguignon wrote:
(Marc Espie) writes:
In article , Pierre Maurette wrote:
Lucas Levrel, le 5/7/2011 a écrit :
[...]
char *s="coucou";
Et pourquoi ce ne serait pas mieux d'écrire:
char* s = "coucou";
Parce qu'on est dans fr.comp.lang.c, pas fr.comp.lang.c++
Ce n'est pas la bonne raison, car c'est pareil en C++.
Visiblement, tu as encore quelques soucis avec la culture locale. Tu veux quelques parentheses pour te detendre ? ((((:)))))
La facon de declarer les pointeurs est un des petits trucs qui permet de differencier simplement les programmeurs habitues aux style C traditionnels de ceux qui pratiquent le C++.
In article <8739kqteg1.fsf@kuiper.lan.informatimago.com>,
Pascal J. Bourguignon <pjb@informatimago.com> wrote:
espie@lain.home (Marc Espie) writes:
In article <mn.3cc17db5be9fc028.79899@free.fr>,
Pierre Maurette <maurette.pierre@free.fr> wrote:
Lucas Levrel, le 5/7/2011 a écrit :
[...]
char *s="coucou";
Et pourquoi ce ne serait pas mieux d'écrire:
char* s = "coucou";
Parce qu'on est dans fr.comp.lang.c, pas fr.comp.lang.c++
Ce n'est pas la bonne raison, car c'est pareil en C++.
Visiblement, tu as encore quelques soucis avec la culture locale. Tu veux
quelques parentheses pour te detendre ? ((((:)))))
La facon de declarer les pointeurs est un des petits trucs qui permet
de differencier simplement les programmeurs habitues aux style C traditionnels
de ceux qui pratiquent le C++.
Parce qu'on est dans fr.comp.lang.c, pas fr.comp.lang.c++
Ce n'est pas la bonne raison, car c'est pareil en C++.
Visiblement, tu as encore quelques soucis avec la culture locale. Tu veux quelques parentheses pour te detendre ? ((((:)))))
La facon de declarer les pointeurs est un des petits trucs qui permet de differencier simplement les programmeurs habitues aux style C traditionnels de ceux qui pratiquent le C++.
Alexandre Bacquart
On 05/07/2011 10:03 PM, Lucas Levrel wrote:
Le 7 mai 2011, Pierre Maurette a écrit :
const char* s = "coucou";
Oui. J'ai perdu du temps avec ce bordel. s est un /char étoile/ non modifiable. En fait un pointeur sur une chaîne en dur. Un littéral chaîne. Le littéral chaîne n'existe que pendant les instants de la compilation.
Peux-tu expliciter ? La chaîne en question est encore dans l'exécutable.
Mon petit doigt me dit qu'il faut dire tableau dans ce contexte :)
-- Alex
On 05/07/2011 10:03 PM, Lucas Levrel wrote:
Le 7 mai 2011, Pierre Maurette a écrit :
const char* s = "coucou";
Oui. J'ai perdu du temps avec ce bordel. s est un /char étoile/ non
modifiable. En fait un pointeur sur une chaîne en dur. Un littéral
chaîne.
Le littéral chaîne n'existe que pendant les instants de la compilation.
Peux-tu expliciter ? La chaîne en question est encore dans l'exécutable.
Mon petit doigt me dit qu'il faut dire tableau dans ce contexte :)
Oui. J'ai perdu du temps avec ce bordel. s est un /char étoile/ non modifiable. En fait un pointeur sur une chaîne en dur. Un littéral chaîne. Le littéral chaîne n'existe que pendant les instants de la compilation.
Peux-tu expliciter ? La chaîne en question est encore dans l'exécutable.
Mon petit doigt me dit qu'il faut dire tableau dans ce contexte :)
-- Alex
Erwan David
de manière plus pratique ça permet d'éviter les erreurs du genre
char* s,t;
alors qu'on voulait en fait écrire
char *s,*t;
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
de manière plus pratique ça permet d'éviter les erreurs du genre
char* s,t;
alors qu'on voulait en fait écrire
char *s,*t;
--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé