Malloc sous Windows - C++ - Programmation
Marsh Posté le 22-12-2002 à 17:01:04
Sous Windows "classique", ça marche très bien..
Un bout de code jeté par .NET ? La vieille erreur, which is it ?
Marsh Posté le 22-12-2002 à 17:15:27
Code :
|
walla le "chti" bou de code ki plante
en gros j ai l erreur au moment ou je veux acceder a ma structure allouée
mais le pire c ke avec un malloc ca passe, mais je peux plus lire dans la structure
donc pour resumer :
calloc -> ecriture impossible
malloc -> lecture impossible
Marsh Posté le 22-12-2002 à 17:20:23
verdoux a écrit : Ben ton code plantera aussi sous unix |
na
ca marche !!!!!
et meme tres bien !!!
mais a force de bidouiller pour le faire marcher sous ouindows, j ai pu faire des conneries ....
Marsh Posté le 22-12-2002 à 17:26:41
MrTonio a écrit : ns = (ns_t *)malloc(sizeof(*ns)); |
vers quoi pointe ns ? vers *boum*.
sizeof(ns_t)
Marsh Posté le 22-12-2002 à 17:27:56
Ca veut dire quoi que tu développes sous .NET ?
Tu utilises VC .NET ? Quel type de projet as tu choisi ?
Marsh Posté le 22-12-2002 à 17:30:04
youdontcare a écrit : vers quoi pointe ns ? vers *boum*. |
sizeof(*ns) ca veut dire la meme chose ke sizeof(ns_t)
Marsh Posté le 22-12-2002 à 17:30:42
verdoux a écrit : Ca veut dire quoi que tu développes sous .NET ? |
ouaip c VC.Net j ai choisit un projet C++ vide et j ai changé la compilation en C
Marsh Posté le 22-12-2002 à 17:52:12
Y a fallu bidouiller quoi pour que ça "marche" (passe) sous Windows ?
Marsh Posté le 22-12-2002 à 17:56:08
carbon_14 a écrit : Y a fallu bidouiller quoi pour que ça "marche" (passe) sous Windows ? |
bah en fait a la base, le bout de code ke j essaye de faire maecher, était remplacé par du Lex/Yacc sous unix.
Mais sinon j ai pas changé grand chose : les cast du malloc et calloc, changement de nom de variable ....
Marsh Posté le 22-12-2002 à 18:01:18
MrTonio a écrit : sizeof(*ns) ca veut dire la meme chose ke sizeof(ns_t) |
c'est vrai que sizeof() est résolu à la compilation. ça ne m'empêche pas de trouver ça pas propre. si le reste du code est du même tonneau, ...
Marsh Posté le 22-12-2002 à 18:05:05
youdontcare a écrit : c'est vrai que sizeof() est résolu à la compilation. ça ne m'empêche pas de trouver ça pas propre. si le reste du code est du même tonneau, ... |
argumente au lieu de critiquer
imagine je decide de changer le type ns_t en machin_t, et ben faudra ke je remplace tout les sizeof(ns_t) alors ke sizeof(*ns) marche tout les temps
j aimerais bien voir comment tu code toa !
Marsh Posté le 22-12-2002 à 18:18:31
>> argumente au lieu de critiquer
déjà dit, suivi de pointeur non initialisé. c'est dans un sizeof() donc pas de problème, c'est 'juste' une réaction allergique. et surtout, voir dernier point.
pour continuer dans le 'pas propre', regarde comment tu mélanges chaînes statiques et chaînes allouées.
>> imagine je decide de changer le type ns_t en machin_t, et ben faudra ke je remplace tout les sizeof(ns_t) alors ke sizeof(*ns) marche tout les temps
moui, et tu ne vas pas changer le nom de la variable ns ?
>> j aimerais bien voir comment tu code toa !
avec des new quand je faisais des malloc, j'utilisais toujours le nom de la structure allouée dans le sizeof() : un coup d'oeil rapide suffit à voir ce qu'on alloue.
Marsh Posté le 22-12-2002 à 18:24:02
youdontcare a écrit : |
pour ca je suis d accord avec toa mais c a cause des modifs a la con pour essayer de faire marcher ce ù^µ%£^*$^ù¨¨%µ de code sous ouindoz
Marsh Posté le 25-12-2002 à 01:03:03
MrTonio a écrit :
|
Erreur !!
Sans lire koi que ce soi de ton code, ta fonction malloc est mal utilisée !!
REGLE D'OR : (notre prof de C nous la dit y'a a peine 15j )
Koi k'il arrive: par exemple:
int *a;
a = (int*)malloc(sizeof(int))
Le paramètre de sizeof DOIT TOUJOURS ETRE DEFERENCER une fois de plus que 'a' (=variable qui prend le retour de la fonction cad un int*)...dc comme 'a' est un int* sizeof aura pour paramètre int et pas int*
Mais bon toi je vois que ta mis *ns : meme si c pas tout a fait de cette erreur qu'il s'agit, je ne vois pas en koi tu mets en nom de variable en argument au lieu d'un type de donnée !
la regle d'or se comprend très bien du fait que un int* (comme a ds mon exemple) pointe sur le début d'une zone mémoire allouer de taille d'un int (logique car a doit pointer sur une zone de la taille d'un int) voilà...ceci dit, je ne c pas si c du C ou C++ que tu fais mais sache que les fonctions delete/new du C++ st davantage conseillées (si tu n'é pa en pure C ) !
Marsh Posté le 25-12-2002 à 02:00:25
s'il te dit que la memoire ne peut etre read, c'est que ton pointeur est mauvais.
Test ce que te renvoit calloc et malloc.
Marsh Posté le 25-12-2002 à 14:35:23
Giz a écrit : |
ah ouais ???? bah dis moa ou alors
moa je vois rien de mal dans ce ke j ai fait ... alors c toi ki comprend po comment ca marche
nan mais de toute facon j ai trouvé d ou ca venait ... et ct pas le bout de code ke j ai montré
en fait ca devait venir des options de compilation de VS.Net et du coup ca fesait tout péter ...
Marsh Posté le 22-12-2002 à 16:49:48
Salut,
je voudrais savoir si il y a une difference entre le malloc/calloc d unix avec celui de windows
aske win me pete une vieille erreur et ca me soul grave
pour info, je developpe sous .Net
---------------
WoIP - Video and Voice over IP - http://www.woip.net/