Bonjour à tous ,
j'utilise une File dans mon code C++.
quelqu'un me propose une solution pour copier les élements d'une file dans une autre .
merci d'avance pour l'aide .
Version imprimable
Bonjour à tous ,
j'utilise une File dans mon code C++.
quelqu'un me propose une solution pour copier les élements d'une file dans une autre .
merci d'avance pour l'aide .
Bonjour,
je pense ce que cela pourra t'aider
voici le fichier File.cc
le code génère une erreur lorsque j'appelle la méthode Enfiler()Code:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
merci de m'aider à trouver la source d'erreur .
:tagcode:
Tu as une erreur de segmentation dans la fonction decaler_tableau() qui est appelée par défiler()
Je ne peux que te conseillais d'utiliser les conteneurs de la STL
Tu sors de ton tableau
Les bornes d'un tableau c'est entre 0 et taille -1 hors là à la dernière itération... ;)Code:
2
3
4
5
Salut,
à première vue, il y a un problème d'indice en fin de cette boucle :
je la limiterais à taille-1 , mais je n'ai pas vu le reste du codeCode:
2
3
4
5
6
7
et maintenant , ça va ?Code:
2
3
4
5
oh lala 8O !!
maintenant je trouve une autre erreur :cry: :
Code:
2
Si ca plante pu oui :mrgreen:
mais oui en tout cas il n'y a pu d'erreurs ici
edit : montre ton header
Donc après je sais pas si c'est vraiment propre ta façon de procéder.Citation:
Si la variable MALLOC_CHECK_ vaut zéro, toutes les corruptions du tas détectées sont ignorées silencieusement
ça ne marche pas tout le temps !!!!!!!!!!!!!!!! :aie: !!
donc voyons le fichier File.h
Code:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Je dirai bien que tu delete quelque chose qui a déjà été delete ou quelque chose dans cette idée.
Donc si c'est bien a cause de ca que cette erreur est généré montre nous ton main() :aie:
j'ai pas de main() , en fait je travaille avec le simulateur ns2 , j'avais juste besoin d'une file dans protocole que je suis entrain d'implémenter .
je ne vois pas l'origine du double free à partir du header, peut être un objet de type File a été alloué dynamiquement et détruit plusieurs fois
il y a peut être un cas (peu probable mais bon) : la variable membre taille n'est initialisée nulle part
donc si on instancie un objet de type File et qu'on le duplique (File::copie_file()) , je crains une alloc qui ne passera pas ( taille = ?)
en plus celle fonction renvoie par valeur et le copy-constructor (généré par le compilo) dans ce genre de code :
fera que firstFile et newFile pointeront vers la meme adresse window, et là le plantage est assuré au delete des deuxCode:File newFile = firstFile.copie_file();
après tout cela n'est qu'hypothèses, si c'est avéré :
remplate copie_file par :
Code:
2
3
4
5
6
7
8
9
10
les fonctions qui utilisent taille sont à observer également,
à moins que l'initialisation de File::taille me soit passée sous le nez
Non, ce n'est évidemment pas la bonne façon de procéder. On peut mettre les balayures sous le tapis quand on balaye une pièce, mais si on fait ça, on aura pas nettoyé (l'objectif ne sera pas atteint).Citation:
Si la variable MALLOC_CHECK_ vaut zéro, toutes les corruptions du tas détectées sont ignorées silencieusement
C'est effectivement la bonne façon de procéder.
merci à tous pour l'aide , le problème est résolu .
j'ai oublié la deuxième ligne :oops: .Code:
2
merciiiiiiiiiiiiii :)