1 votes

Lstrcpy() provoque des exceptions dans le code visual C++

J'ai utilisé un contrôle de liste virtuelle MFC pour améliorer les performances et je gère GetDispInfo(NMHDR* pNMHDR, LRESULT* pResult) pour peupler le ListCtrl. Le code pertinent dans cette méthode est le suivant:

if (pItem->mask && LVIF_TEXT) {

    switch(pItem->iSubItem)

    {
        case 0:
            lstrcpy(pItem->pszText, rLabel.m_strText);  
        break;
        case 1:
            sprintf(pItem->pszText, "%d", p.o_Value);
        break;
        default:
            ASSERT(0);
        break;
    }
}

Ici, lorsque j'utilise lstrcpy(), lorsque je fais défiler vers le bas/haut, j'obtiens tout un tas d'exceptions disant First-chance exception at 0x7c80c741 in test_list_control.exe: 0xC0000005: Access violation writing location 0xb70bf2ac. Ces messages apparaissent dans la sortie de débogage. Mais le programme ne plante pas. Est-ce que quelqu'un pourrait expliquer quel est le problème ici et comment devrais-je le surmonter??

rLabel est un CLabelItem que j'ai déclaré précédemment.

Merci!

1voto

PhilipM Points 1

Je pense que vous devriez vérifier si le tampon pointé par pItem->pszText est suffisamment grand pour contenir rLabel.m_strText. Ou si rLabel.m_strText est une chaîne correcte terminée par null. Pour moi, cela ressemble à l'écriture dans une mémoire non initialisée. Utilisez le débogueur pour vérifier cela.

1voto

Kate Gregory Points 13451

Si tout ce que vous voyez est la première chance exception chose, arrêtez de vous inquiéter. Voir par exemple http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx mais vous pouvez trouver des pages similaires partout (principalement de 5 à 10 ans.) Cela signifie qu'un code a été lancé et que l'exception a été capturée et traitée. Je vois cela dans des applications MFC parfois. Comme le dit l'entrée de blog

Les messages d'exception de première chance ne signifient souvent pas qu'il y a un problème dans le code.

Je attendrais de voir des erreurs réelles avant de s’énerver à ce sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X