2017-06-21 2 views
0

WaitFree Var code in assembler window Je reçois cette exception lorsque j'attribue une longueur de tableau à 0 sur un tableau dynamique en trois dimensions avant de quitter le programme Si je ne le mets pas 0 et quitte l'application, j'obtiens Je voudrais savoir si quelqu'un d'autre a ce problème avec les tableaux dynamiques.Je l'ai aussi fait travailler sur des tableaux dynamiques de taille.La taille du plus petit tableau qui provoque l'erreur dblArray (1000, 5, 21): tableau de tableau de double comme sont (1000, 25, 21), (1000, 27, 94), (1000, 28, 94), et (1000, 29, 94). les tableaux (1000, 18, 21) et (1000, 26, 94) se terminent avec succès Tous les tableaux sont doubles comme décrit sur le premier tableau, la longueur de la création sur la première dimension est suffisante pour libérer de la mémoire sur le tableau ou tous les les dimensions sont mises à 0? Cette exception n'est pas t trappable et ne peut pas être arrêté de sorte que l'exécutable se comporte de manière erronée. Les tableaux eux-mêmes semblent être des détenteurs de place existant vie entière de l'application. Ils ne sont pas créés ou détruits. Y a-t-il un autre moyen de les déclarer? La plupart des autres questions impliquent une sorte d'exception: une erreur de déclaration comme un mauvais type de variable. Cela implique pour moi que la ressource ou le tableau est lié d'une manière ou d'une autre comme si l'application en disposait avant que la procédure de fermeture ne soit exécutée.Exception "Externe: SIGSEGV" de l'appel SetLength

Répondre

1

Ce type d'erreur indique une corruption du tas. Généralement parce que vous écrivez au-delà de la plage d'un tableau. Ces écritures peuvent corrompre le tas.

Vous devrez déboguer votre programme pour déterminer quelle partie spécifique de l'accès est en dehors des limites. Activez l'option compilateur de vérification de plage pour que le compilateur émette du code d'exécution qui vérifie l'accès au tableau n'utilise pas d'index hors limites.

+0

Merci, je vais essayer et revenir à Stack Overflow. –

+0

Merci Dave cela a fonctionné après avoir corrigé les erreurs de distance. Je suis ennuyé je ne pouvais pas voir les erreurs parce que le programme a semblé fonctionner la plupart du temps. J'avais une valeur d'index de -1 sur les tableaux dynamiques. J'en ai aussi eu un où le tableau dynamique n'était pas assez grand. Je suppose que je m'attendais à ce que Lazarus rattrape l'erreur, mais il semble plus proche de C à cet égard. –