Récemment, j'ai écrit un programme qui utilisait le fonctionnement de file d'attente du langage C sous le système Linux, j'ai donc eu le problème suivant
Voici le code de la file d'attente :
Ce fichier d'en-tête de file d'attente <.>
1 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 |
|
1 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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
|
Pour Pour l'opération de mise en file d'attente, la taille de la file d'attente est de 1, et pour l'opération de retrait de la file d'attente, l'opération de taille de file d'attente est de 0, puis le programme revient en arrière pour déterminer la taille de la file d'attente. La valeur de la taille devient 393216. Je ne sais pas ce qui s'est passé après l'avoir modifiée pour un. ça fait longtemps.
Le message d'erreur est comme ça
1 |
|
Répondre à la discussion (solution)
Commentez une partie du code Si le problème disparaît, le problème réside dans le. code commenté. Imprimez la valeur de la taille en temps réel pour voir à quelle étape l'exception s'est produite Pour référence seulement1 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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
|
Le le problème est trouvé, ce n'est pas une file d'attente. La raison est que j'ai mal alloué un char* dans une fonction, puis j'ai appelé le char* renvoyé par la fonction dans le thread. Après l'avoir utilisé, je l'ai libéré (à la fin de la fonction. ). En conséquence, l'erreur ci-dessus a été signalée. J'ai commenté ceci. Après avoir dit gratuit, c'est bien. Ce qui est déroutant, c'est que je ne sais pas pourquoi il ne peut pas être gratuit
free devrait être placé dans. la fonction où vous écrivez malloc*** glibc détectée *** double libre ou Corruption (!prev) :Fait généralement référence à l'exploitation d'un objet libéré, tel que :
1. a été relâché, mais l'objet pointé par le pointeur est à nouveau actionné.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!