Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
6248 connectés 

 

 

 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6
Auteur Sujet :

[C/C++] Défi: Trouvez les bogues ! (n°42)

n°241984
bjone
Insert booze to continue
Posté le 08-11-2002 à 21:42:13  profilanswer
 

Reprise du message précédent :
sais pas.
je vois pas l'interet par rapport à l'avoir dans le segment de donnée...

mood
Publicité
Posté le 08-11-2002 à 21:42:13  profilanswer
 

n°242029
blackgodde​ss
vive le troll !
Posté le 08-11-2002 à 23:46:34  profilanswer
 

je m'interresse bcp a la structure des PE, c pour ca c détails m'interressent (c vrai qd on code des app on sen cogne completement)


---------------
-( BlackGoddess )-
n°242088
Musaran
Cerveaulté
Posté le 09-11-2002 à 04:10:48  profilanswer
 

Code :
  1. char  tabChar2[] = "Hello World";

Le tableau est initialisé par un élément solidairement et uniformément constant, c'est clair.

Code :
  1. char  tabChar1[] = {'H','e','l','l','o',' ','W','o','r','l','d','\0'};

Chacun de ces chars pourrait provenir d'une variable ou d'un appel de fonction.
La constance éventuelle n'est connue qu'après examen de tous les éléments.
 
Donc, c'est simplement une mauvaise optimisation.
 
Quoi qu'il en soit, c'est bien une variable locale, chaque appel de fonction génère bien sa propre copie.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°242594
Ace17
Posté le 10-11-2002 à 13:17:37  profilanswer
 

BlackGoddess a écrit a écrit :

je m'interresse bcp a la structure des PE, c pour ca c détails m'interressent (c vrai qd on code des app on sen cogne completement)




La structure des PE :D ? Les virus, quoi!  :lol:

n°242701
blackgodde​ss
vive le troll !
Posté le 10-11-2002 à 17:25:28  profilanswer
 

non pas forcément ... pour faire un compilateur par exemple, tu dois dois savoir comment est écrit un .exe non ?
 
fo pas croire que tout se qui se rapproche du système, c pour les virus !!!


---------------
-( BlackGoddess )-
n°242869
Musaran
Cerveaulté
Posté le 11-11-2002 à 03:49:40  profilanswer
 

Je crois que tu perds ton temps à essayer de te justifier... ils n'ont pas l'air de vouloir te croire.
 
(oubliez pas qu'il reste des bogues à trouver)


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°242896
blackgodde​ss
vive le troll !
Posté le 11-11-2002 à 11:19:02  profilanswer
 

ouais mais qd mm, tlm me dit ca alors que c'est faux, c'est lourd à la fin ...


---------------
-( BlackGoddess )-
n°242974
Ace17
Posté le 11-11-2002 à 14:38:22  profilanswer
 

Nan mais c'est bon je te crois mais c'est juste que je voyais pas d'autres utilités envisageables ( écrire un compilo ca me parait un peu ardu )  
 
Mais si c'est juste pour la connaissance de la théorie alors pourquoi pas
 
edit : personnelement la connaissance du format PE ne m'a pas encore servi a autre chose :D


Message édité par Ace17 le 11-11-2002 à 14:39:10
n°242981
blackgodde​ss
vive le troll !
Posté le 11-11-2002 à 14:56:32  profilanswer
 

pour l'instant ca ne ma pas été tres utile non plus, mais j'm bien essayer de comprendre comment fonctionnent les choses


---------------
-( BlackGoddess )-
n°247567
blackgodde​ss
vive le troll !
Posté le 18-11-2002 à 12:49:14  profilanswer
 

et bin c mort ici ??? plus de bogues ? zut alors :(


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 18-11-2002 à 12:49:14  profilanswer
 

n°248161
Musaran
Cerveaulté
Posté le 19-11-2002 à 04:10:03  profilanswer
 

Tricheur !
Tu ne connais pas toi-même la réponse...
STP supprime ton post.
 
[B]Solution n° 24:[/B]

Code :
  1. #define _stringer (t) #t //erreur
  2. #define _stringer(t) #t //ok

Il ne faut pas d'espace entre le nom de macro et la parenthèse ouvrante.
 
Vous êtes vraiment mous... ça n'intéresse personne ?
Remarque, du code bogué, on en fait bien assez comme ça sans se forcer.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°248185
blackgodde​ss
vive le troll !
Posté le 19-11-2002 à 08:20:42  profilanswer
 

si si si moi ca m'interresse de chercher :) (qd je c ke les gens connaissent la solution :p) mais chui pas un expert en débogage ...


---------------
-( BlackGoddess )-
n°248186
blackgodde​ss
vive le troll !
Posté le 19-11-2002 à 08:20:59  profilanswer
 

au fait ca fait quoi #t ?


---------------
-( BlackGoddess )-
n°249158
Musaran
Cerveaulté
Posté le 19-11-2002 à 23:40:23  profilanswer
 

#t transforme l'argument de macro t en "chaîne littérale", avec guillemets et séquences d'échappements si nécessaire.

Code :
  1. scanf ("%"_stringer(BUFSIZ)"s", buf)
  2. scanf ("%""32""s", buf) //macro développée
  3. scanf ("%32s", buf) //chaînes adjacentes jointes


 
 
[B]Solution n° 25:[/B]

Code :
  1. #define _stringer(t) #t //danger
  2. #define stringer(t) #t //mieux

Les noms commençant par "_" sont réservés par le standard.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°249237
blackgodde​ss
vive le troll !
Posté le 20-11-2002 à 09:00:38  profilanswer
 

ok, d'accord, merci :)


---------------
-( BlackGoddess )-
n°249238
blackgodde​ss
vive le troll !
Posté le 20-11-2002 à 09:06:03  profilanswer
 

Trouvez les 10 bogues ! (n° 19 à 28)
 
(je c pas si a été déjà dit)
 
dans

Code :
  1. /**/func () {


 
func n'a pas de "return type", il me semble que par defaut c un int, mais ca me parait pas tres standard ...
 
et puis aussi l'espace avant les parenthèses


---------------
-( BlackGoddess )-
n°250377
Musaran
Cerveaulté
Posté le 21-11-2002 à 04:07:15  profilanswer
 

Oui, bravo ! (enfin quelqu'un qui réagit)
 
[B]Solution n° 26:[/B]

Code :
  1. func(){

Cette fonction a un type de retour int implicite, or elle ne renvoie rien.
Et de toutes façon, le type implicite n'a plus cours, ni pour les constantes, ni pour les fonctions.
C'est donc une double erreur.
Et puisqu'on est en C, levons toute ambiguïté sur les arguments attendus:

Code :
  1. void func(void){


Je n'ai pas trouvé de réponse franche pour savoir si le pseudo argument "void" est nécessaire pour une telle définition. Quelqu'un sait ?
 
Pour l'espace, ça ne pose pas de problème. Il n'y a que pour la définition d'une macro-fonction que c'est important.
 
 
Rappelons le code coupable, corrigé des bogues déjà trouvés.
Fichier bogues.c

Code :
  1. #include <stdio.h>
  2. #include "stdlib.h"
  3. #define BUFSIZE 32
  4. #define stringer(t) #t //transforme un mot du source en chaîne littérale
  5. void func (void) {
  6. char* buf;
  7. do {
  8.  if (buf= (char*)malloc(BUFSIZE))
  9.   if (scanf ("%"stringer(BUFSIZE)"s", buf)) {
  10.    //traiter la donnée...
  11.   }
  12.   else
  13.    perror("echec de lecture" );
  14.  free(buf);
  15. } while (!feof(stdin));
  16. }


Il en reste 3 à découvrir.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°250404
Kristoph
Posté le 21-11-2002 à 09:33:59  profilanswer
 

Pour le void, mes souvenirs sont que en C il faut le mettre et qu'en C++ il ne faut pas. Bien sur, vu que la pluspart des compilateurs C font aussi C++ et vice versa, en général ca passe bien.

n°250837
blackgodde​ss
vive le troll !
Posté le 21-11-2002 à 17:30:59  profilanswer
 

c plus claire comme ca :) je cherche ...


---------------
-( BlackGoddess )-
n°250839
blackgodde​ss
vive le troll !
Posté le 21-11-2002 à 17:33:27  profilanswer
 

"sdtlib.h" vaut mieux pas mettre <stdlib.h> comme pour celui du dessus ? (si l'utilisateur en fait un aussi, ca sera le sien et pas le standard)
 
vu qu'il y a 2 guillemets, ca compte pour 2 bogues ? :p


Message édité par blackgoddess le 21-11-2002 à 17:33:59

---------------
-( BlackGoddess )-
n°250844
blackgodde​ss
vive le troll !
Posté le 21-11-2002 à 17:40:46  profilanswer
 

atta atta atta ... encore 1 il me semble :
 

Code :
  1. if (buf= (char*)malloc(BUFSIZE))
  2.   if (scanf ("%"stringer(BUFSIZE)"s", buf)) {
  3.    //traiter la donnée...  
  4.   }
  5.   else
  6.    perror("echec de lecture" );
  7. free(buf);


 
en fait le 1er if sans guillemets me turlupine ... le else va-t-il d'appliquer au 1er if ou au 2eme ? si c au 1er le mess d'erreur na rien a voir.
 
et sinon, il me semble en avoir trouver un autre :
 

Code :
  1. free(buf);


 
va s'executer mm si malloc a échouer, donc free va essayer de libérer la mémoire mm si elle a pas été allouée


---------------
-( BlackGoddess )-
n°251915
Angel_Doog​las
Le dernier des humains
Posté le 23-11-2002 à 09:56:48  profilanswer
 


Fichier bogues.c

Code :
  1. #include <stdio.h>
  2. #include "stdlib.h"
  3. #define BUFSIZE 32
  4. #define stringer(t) #t //transforme un mot du source en chaîne littérale
  5. void func (void) {
  6. char* buf;
  7. do {
  8.  if (buf= (char*)malloc(BUFSIZE))
  9.   if (scanf ("%"stringer(BUFSIZE)"s", buf)) {
  10.    //traiter la donnée...
  11.   }
  12.   else
  13.    perror("echec de lecture" );
  14.  free(buf);
  15. } while (!feof(stdin));
  16. }


 
Le do  while ne devrait pas etre un while?


Message édité par Angel_Dooglas le 23-11-2002 à 09:57:26
n°251921
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 23-11-2002 à 10:46:06  profilanswer
 

il me semble que ceci est déprécié
 

Code :
  1. "%"stringer(BUFSIZE)"s"


---------------
du bon usage de rand [C] / [C++]
n°252391
Musaran
Cerveaulté
Posté le 24-11-2002 à 02:59:44  profilanswer
 

Kristoph a écrit a écrit :

Pour le void, mes souvenirs sont que en C il faut le mettre et qu'en C++ il ne faut pas.


En C actuel:

Code :
  1. void func(    );  //             déclaration             (arguments inconnus)
  2. void func(void);  //             déclaration + prototype (pas d'arguments)
  3. void func(    ){} //définition + déclaration             (arguments inconnus)
  4. void func(void){} //définition + déclaration + prototype (pas d'argument)


Si un prototype a déjà été donné, "void func(){" est acceptable.
Sinon, c'est là que ça devient flou...

Code :
  1. void func(    ){} //Ceci va-t'il déclarer implicitement...
  2. void func(    );  // ?
  3. void func(void);  // ?


J'ai eu plusieurs avis divergents, et compétents bien que pas certains de leur affirmations... question en suspens.
 
Admirez la subtile compliquation et inutilité du problème...
Source: http://www.isty-info.uvsq.fr/~rume [...] 9.html#q_1
 
En C++, le prototypage est obligatoire, et (void) implicite, plus de problème.
 
 

BlackGoddess a écrit a écrit :

en fait le 1er if sans guillemets me turlupine ... le else va-t-il d'appliquer au 1er if ou au 2eme ? si c au 1er le mess d'erreur na rien a voir.


À l'if immédiatement précédent, donc pas de problème.
Le "};" d'origine terminait la série de if et rendait le else orphelin.
Je me suis permis de ne pas mettre d'accolades au premier if car le if-else suivant constitue une seule grosse expression (statement).
Il va de soi que ce n'est pas recommandé dans du vrai code.
 

Citation :

Code :
  1. free(buf);

va s'executer mm si malloc a échouer, donc free va essayer de libérer la mémoire mm si elle a pas été allouée

piégacon© !
Dans ce cas, malloc renvoie NULL, et free(NULL) est une opération nulle permise.
 
Le "stdlib", c'est un oubli.
 
 

Angel_Dooglas a écrit a écrit :

Le do  while ne devrait pas etre un while?


Tu chauffes... t'es pas loin... cherche mieux.
 
 

Taz@PPC a écrit a écrit :

il me semble que ceci est déprécié

Code :
  1. "%"stringer(BUFSIZE)"s"




Sur quel aspect ?
Au dernières nouvelles, tout marche et n'a pas de raison d'être mis aux oubliettes.


Message édité par Musaran le 24-11-2002 à 03:00:43

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°252429
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 24-11-2002 à 11:43:22  profilanswer
 

ben j'ai dit "il me semble"


---------------
du bon usage de rand [C] / [C++]
n°255644
Musaran
Cerveaulté
Posté le 27-11-2002 à 22:19:21  profilanswer
 

[B]Solution n° 27:[/B]
scanf("%s"... s'attend à recevoir un argument char*, et reçoit un void*.
Cela n'est pas pareil, des pointeurs de type différent peuvent être de tailles différentes, ou tout simplement incompatibles.
Voir Recommended C Style and Coding Standards, rubrique "Portability".
 
Ordinairement, le compilateur voit l'argument attendu par la fonction grâce à son protoptype, et convertit le pointeur, ou en C++ donne un message d'erreur si ce n'est pas possible.
Seulement, scanf est une fonction à liste d'argument variable, les arguments au-delà du premier correspondent à "...", et les srcupules du compilateur s'arrêtent là.
 
Donc, il faut caster les arguments de printf ou scanf s'ils ne sont pas du bon type:

Code :
  1. scanf ("%32s", (char*)buf);


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°255700
Angel_Doog​las
Le dernier des humains
Posté le 27-11-2002 à 22:58:23  profilanswer
 

Musaran a écrit a écrit :

[B]Solution n° 27:[/B]
scanf("%s"... s'attend à recevoir un argument char*, et reçoit un void*.
 
Donc, il faut caster les arguments de printf ou scanf s'ils ne sont pas du bon type:

Code :
  1. scanf ("%32s", (char*)buf);






 
Je ne comprends pas, dans ta derniere correction ton buf est declare en tant que char *.

n°255759
Musaran
Cerveaulté
Posté le 28-11-2002 à 00:17:54  profilanswer
 

Je suis navré, j'ai corrigé ceci à tort en re-postant le code.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°258142
Musaran
Cerveaulté
Posté le 01-12-2002 à 02:35:28  profilanswer
 

[B]Solution n° 28:[/B]

Code :
  1. scanf ("%32c"...
  2. scanf ("%32s"...

Les deux vont lire et écrire 32 caractères.
Quelle différence ? %s s'arrête sur les blancs. Mais encore ?
%s écrit une chaîne C, et va donc écrire un dernier et éventuellement 33ème caractère: '\0'. Écrasement de mémoire !
C'est d'autant plus insidieux qu'il peut passer inapperçu, si cet octet écrasé est le poids fort d'une variable voisine du buffer et qu'il vaut 0 de toutes façon, ou si cette variable est elle-même remplie par scanf après-coup.
 
Une belle petite boulette qui attendra le moment propice pour exploser.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°262694
Musaran
Cerveaulté
Posté le 06-12-2002 à 03:55:58  profilanswer
 

[B]Solution n° 29:[/B]

Code :
  1. do{
  2. scanf(/*...*/);
  3. //...
  4. } while (!feof(/* FILE* */));

Ce code souffre de la maladie du Pascal.
En Pascal, end-of-file est vrai quand il n'y a plus rien à lire.
En C, feof n'est vrai qu'une fois qu'on a tenté de lire alors qu'il n'y a plus rien à lire.
Bref, trop tard, c'est un voyant qui s'allume après le crash, et cette boucle fait un dernier tour de trop, le scanf échouant.
 
C'est bien sur valable pour les fichiers comme pour la console, pour feof comme pour le non-standard eof.
La solution est d'utiliser la lecture comme test de fin:

Code :
  1. while(scanf(/*...*/)==NombreDeChampsALire)
  2. //...;


 
J'espère que ce voyage au pays des emmerdes vous a plus.
Restez attentif, le prochain départ est pour bientôt !


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°263952
Angel_Doog​las
Le dernier des humains
Posté le 07-12-2002 à 01:53:51  profilanswer
 

C'etait tres interressant mais je ne suis pas d'accord avec ton analyse:
Le vrai "criminel" dans cette affaire est le do { } while()
En effet,  
 
 

Code :
  1. while ( !feof(stdin))
  2. { whatever avec scanf}

 
 
Marche parfaitement bien.  
Bon je pinaille un peu et je comprends que tu voulais nous montrer une subtilite toute autre (que je ne connaissais pas d'ailleurs :))
En tout cas ce reservoir a bugs etait tres joli.

n°264606
Musaran
Cerveaulté
Posté le 08-12-2002 à 02:43:54  profilanswer
 

Non, non !
feof ne sera vrai que lorqu'une lecture aura effectivement échoué, la tournure de la boucle n'y change rien.
Le eof de Pascal, lui, est vrai quand la prochaine lecture échouera.
 
Vous en reprendrez bien un petit ?
 
[B]Trouvez le bogue n°30 ![/B]

Code :
  1. double d;
  2. scanf ("%f", d);
  3. printf("%f", d);


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°264617
Deadog
Dain Bramaged
Posté le 08-12-2002 à 05:27:43  profilanswer
 

Solution n°30 :
 
scanf ("%f", &d);
 
 
typique :D

n°264621
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 08-12-2002 à 09:31:15  profilanswer
 

Deadog a écrit :

Solution n°30 :
 
scanf ("%f", &d);
 
 
typique :D

sauf que y en a 2 bugs,ce n'est pas "%f" mais "%lf" pour les double (et "%Lf" pour les long double)


---------------
du bon usage de rand [C] / [C++]
n°264968
Musaran
Cerveaulté
Posté le 08-12-2002 à 21:44:09  profilanswer
 

J'avais oublié de mettre '&', désolé.
 
Bravo à Taz@PPC qui ne s'est pas laissé distraire.
 
[B]Solution n° 30:[/B]

Code :
  1. float f;
  2. double d;
  3. scanf ("%f" , &f); //lire un float
  4. scanf ("%lf", &d); //lire un double
  5. printf("%f" ,  d); //écrire un double
  6. printf("%lf",  d); //ce format n'existe pas


Mais alors, comment écrit-on un float ?
Comme un double.
Dans la partie variable d'une liste d'arguments, les types sont convertis selon les règles ancestrales du C.
Un float est automatiqement transformé en double.
De la même façon, un char est transformé en int. "%i" ou "%c" ne servent qu'à changer l'interprétation.
short, par contre, n'est pas altéré.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°264970
Musaran
Cerveaulté
Posté le 08-12-2002 à 21:44:56  profilanswer
 

[B]Trouvez les bogues n°31 et 32 ![/B]
Ce code n'est pas de mon invention, c'est un extrait authentique.

Code :
  1. void* Realocate(void*buf, int os, int ns){
  2. void*temp;
  3. temp = malloc(os);
  4. memcpy((void*)temp, (void*)buf, os);
  5. free(buf);
  6. buf = malloc(ns);
  7. memset(buf, 0, ns);
  8. memcpy((void*)buf, (void*)temp, ns);
  9. return buf;
  10. }


Il y a aussi 6 défauts (environ, selon la façon de compter).


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°264978
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 08-12-2002 à 21:56:19  profilanswer
 

+ on ne teste si os et ns sont des valeurs valides (>0, je conseille l'emploi des types unsigned dès qu'on manipule des entiers strictement positifs, c'est cela de moins a vérifier, oublions un peu notre paresse)
+ on ne teste pas le bon fonctionnement de malloc, qui doit renvoie NULL en cas d'échec (ou si son argument est 0)
+ les cast sont inutiles
+ on ne sait pas si buf a été alloué avec malloc. s'il s'agit d'un simple tableau, booom
+ pour le 2eme appel à memcpy, si ns>os , re-boom, il faut donc utiliser os comme argument
+ fuite de mémoire: on ne libère pas temp
+ et evidemment void*temp et void*buf ou il manque un espace
 
 
7  :D
 
* tout ce code est inutile, realloc fait tres bien le boulot.
* l'appel malloc+memset(0) doit etre remplacer par un appel a calloc
 
et qu'on ne vienne pas me dire qu'il faut caster la valeur de retour de malloc, sinon vous allez voir pourquoi je m'appelle Taz :spookie:


Message édité par Taz@PPC le 08-12-2002 à 22:03:57

---------------
du bon usage de rand [C] / [C++]
n°266184
Musaran
Cerveaulté
Posté le 10-12-2002 à 02:28:09  profilanswer
 

Attends... mettons de l'ordre:
 
Bogues

Citation :

+ pour le 2eme appel à memcpy, si ns>os , re-boom, il faut donc utiliser os comme argument

31) Effectivement, on risque de lire de la mémoire non-allouée. Mais la solution n'est pas aussi simple !
 

Citation :

+ fuite de mémoire: on ne libère pas temp

32) Ouaip.
 

Citation :

+ on ne teste pas le bon fonctionnement de malloc, qui doit renvoie NULL en cas d'échec (ou si son argument est 0)

33) Oui. Pourquoi on a tendance à oublier ça ?
 
Ah là là ! Laissez deux bogues seuls et ils font un petit...
 
 
Défauts dangereux

Citation :


+ on ne teste si os et ns sont des valeurs valides (>0, je conseille l'emploi des types unsigned dès qu'on manipule des entiers strictement positifs, c'est cela de moins a vérifier, oublions un peu notre paresse)

1) Affirmatif (je n'y avais pas pensé).
 
 
Stupidités

Citation :

+ les cast sont inutiles

2) Yop !
 

Citation :

* tout ce code est inutile, realloc fait tres bien le boulot.

3) Oui oui. Réécrire les fonctions standard est un formidable moyen de faire des bogues.
 

Citation :

* l'appel malloc+memset(0) doit etre remplacer par un appel a calloc

4) Commment ? Tu voudrais utiliser des fonctions standard ?
 
 
Fausses alertes

Citation :

+ on ne sait pas si buf a été alloué avec malloc. s'il s'agit d'un simple tableau, booom

-> Ça n'est pas détectable, pas avec des moyens standard en tout cas.
 

Citation :

+ et evidemment void*temp et void*buf ou il manque un espace

-> C'est certes moche, mais tout à fait correct.
 
 
Disons qu'il reste à trouver:
2 stupidités dispendieuses
2 pinaillages affectant l'utilisateur


Message édité par Musaran le 11-12-2002 à 02:27:59

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°266214
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 10-12-2002 à 08:35:11  profilanswer
 

Citation :

Fausses alertes
+ on ne sait pas si buf a été alloué avec malloc. s'il s'agit d'un simple tableau, booom
-> Ça n'est pas détectable, pas avec des moyens standard en tout cas.

certes mais je n'ai jamais vu de fonction qui désalloue comme ca.


---------------
du bon usage de rand [C] / [C++]
n°266215
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 10-12-2002 à 08:39:07  profilanswer
 

ben je sais plus quoi ca doit etre trivial: je sais jsute que si l'allocation du nouveau buf echoue, et bien on a tout perdu! en supposant que toutes les instructions précédentes ont fonctionnées, on ferait bien de retourner temp.
 
mais alors pres, je crois que tu pinailles vraiment la
 
 
+ y a 2 l a Reallocate  :D
+ le memset(0) peut avoir un effet désastreux avec des types autre qu'entiers et conduit à des représantions invalides (pas 0.0 en tout cas) ou à des trap representations


Message édité par Taz@PPC le 10-12-2002 à 08:47:23

---------------
du bon usage de rand [C] / [C++]
n°266247
Kristoph
Posté le 10-12-2002 à 09:39:53  profilanswer
 

Si le but est de mimer le comportement de realloc, il faut aussi penser a faire un simple malloc dans le cas ou buf vaut NULL ( donc pas alloué avant l'appel )
Et si nc vaut 0; il faut faire un free sur buf

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6

Aller à :
Ajouter une réponse
 

Sujets relatifs
comment trouvez mon site???[JS] JEU: Trouvez l'erreur :o)
Un petit défi : echecs et IA[DEFI DELPHI] - Delayer un buffer pour les Visualization Winamp
Defi programmation JAVA ou autreDefi PHP n°3 !!!
Plus de sujets relatifs à : [C/C++] Défi: Trouvez les bogues ! (n°42)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)