Le 18 mai 2006 - 19 h 16, chamank a écrit :
Merci beaucoup, le problème venait bien de là . Par contre ce qui m'étonne un peu c'est qu'auparavant j'avais déjà alloué un certain espace mais j'avais le même genre d'erreur. Enfin je n'avais surement pas assez d'espace d'alloué, ou bien il y avait déjà une erreur qui en entrainait une autre.
Au risque de passer pour un boulet (je tente quand même... ), comment tu fais tu tester le code de retour du malloc? Un return 0 me vient à l'esprit mais je ne suis pas sûr...
|
Penser à se faire offrir un livre de C, par exemple : le K&R

Bon. Pour tester le retour de malloc :
if (malloc(mazone, 50) == NULL)
{
printf "erreur allocation etc etc";
exit(mon_code_retour_pour_erreur);
}
de manière générale, on fait :
rc = mafonction(...);
rc étant le code retour (habituellement un int), 0 étant le code "OK", et les autres codes... ceux que tu veux tester.
Avant ça tu me disais que le cast de malloc est à éviter. Si je comprends bien:
char *var;
var=(char *) malloc(50*sizeof(char)); ça ne serait pas bon, mais:
char *var;
*var=(char *) malloc(50*sizeof(char)); le serait? enfin en partant du principe que ce que je viens d'écrire est bon, gcc me renvoit un warning (attention : assignment makes integer from pointer without a cast) et le prog ce termine sur un seg fault.
Enfin je veux bien deux ou trois explications si ça ne te dérange pas.
|
pfouuuuuu ! tu es un dilettante du C, hein ? c'est pas du tout péjoratif, tu essaies de te débrouiller et c'est bien, mais le C ne supporte pas l'approximation. C'est pas du basic ou du php, désolé.
quand tu fais (char *) malloc(50 etc etc), tu castes malloc en char * ; dans la plupart des cas : pas bon !!!
var = malloc(50); ira très bien, puisque sizeof char == 1
sizeof sans parenthèses, sizeof n'étant pas une fonction mais si tu veux, tu peux en mettre autant que tu veux : sizeof(((((((((size of int))))))))) marche très bien, même si ça nuit un peu à la lisibilité ;-)
*var = malloc(....) -> tu alloues un pointeur d'un pointeur, aïe !!! N'oublie pas que malloc() alloue
déjà un pointeur ! Maintenant, si tu veux travailler avec des pointeurs de pointeurs, ça marche, mais bon, vaut mieux commencer avec du simple...
Pour me répéter : si tu dois faire du C, cherche sur le net des ressources, achète un bouquin pour bien débuter. Parce que les mauvaises habitudes sont vite prises, et le C ne supporte pas le flou artistique.
Je maintiens des programmes en C de plusieurs milliers de lignes, et quand c'est mal écrit, je souuuuuuuuuuuuuffre tu imagines pas combien, et ça incite à se dire qu'un prog bien écrit, c'est pas que du scolaire et pour faire beau, c'est du tous les jours...
Pour finir : comme dit le proverbe chinois, celui qui pose une question est bête une fois, celui qui n'en pose pas est bête toute sa vie.