[MFC] Plantage étrange en release et pas en debug
Bonjour à tous,
Dans une appli MFC de browser d'images, j'ai un plantage en release et pas en debug. Pour localiser le bug, j'ai utilisé des Beep() dans mon code et là, stupeur, le plantage disparaît ! Il y a en particulier une ligne où un unique Beep() avec de mauvais paramètres (voir code ci-dessous) évite le crash.
J'ai essayé de remplacer le Beep() par un Sleep(), pensant à un problème de synchronisation mais le plantage réapparaît.
Quelqu'un a-t-il déjà eu ce problème ? D'où peut venir ce comportement ? Problème de mémoire, synchronisation, autre... ?
Code:
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
|
long CImageBrowser::DisplayImagesRange(long StartIndex, long StopIndex)
{
long returnValue = 0;
long range = StopIndex - StartIndex;
if(range < 0 || StartIndex < 0 || StopIndex < 0 )
return -1;
if(StartIndex >= m_PathesArray.GetSize())
{
FreeDisplay();
//Update only the images side
InvalidateRect(m_rBrowserRect);
SetScrollInfo(0);
return -1;
}
if(range > m_Sizes.m_Nb_Visible_Vignettes)
returnValue = ResizeRange(StartIndex,StopIndex);
if(StopIndex > m_PathesArray.GetSize())
returnValue = ResizeRange(StartIndex,StopIndex);
if(returnValue < 0)
return returnValue;
FreeDisplay();
SetScrollInfo(0);
////////////
Beep(0,0); //normalement, le premier paramètre (fréquence)
//doit être entre 37 et 32767
////////////
//load images
for(int i=StartIndex;i<StopIndex;i++)
DisplayDefect(m_PathesArray.GetAt(i),i-StartIndex);
//Update only the images side
InvalidateRect(m_rBrowserRect);
m_DisplayedNumber = m_Sizes.m_Nb_Visible_Vignettes;
if(m_FirstImageIndex > m_DefectNumber - m_Sizes.m_Nb_Visible_Vignettes)
m_DisplayedNumber = m_DefectNumber - m_FirstImageIndex;
SetSelection(0,0);
return 0;
} |
Je peux expliquer un peu plus le code de cette fonction si nécessaire.