per catturare i bug di troncamento del puntatore in 64 bit, ho aggiunto lo snippet di codice menzionato here che riserva i 4GB inferiori di memoria in modo che gli allocati siano superiori a 32 bit. In un'applicazione di test MFC x64, chiamo la funzione di prenotazione per prima cosa in InitInstance(). Ho poi aggiunto un pulsante che fa semplicemente:FileDialog si blocca quando fondo 4GB pieno
CFileDialog dlg(TRUE);
dlg.DoModal();
chiamata DoModal alla fine si blocca da qualche parte con uno stack in "terra di nessuno":
> 000000018000163b()
0000000100000024()
0000000000000001()
Questo non è MFC specifico in quanto ottengo lo stesso comportamento con un FileDialog .NET. Penso che sia qualcosa fuori dalle mie mani dal momento che il file attuale FileDialog appare brevemente e poi si blocca. Sembra un'estensione della shell o qualcosa del genere ma non riesco a capire da dove provenga, dal momento che lo stack delle chiamate non aiuta, ma voglio scoprire se c'è qualcosa che posso fare!
Se rimuovo la funzione di prenotazione speciale, non si verificano più gli arresti anomali.
Perplesso!
Bene, si sta lavorando, si stanno recuperando i bug puntatore. Solo non nel tuo codice. Utilizzare l'utilità AutoRuns di SysInternals per disabilitare le estensioni della shell. –
Cosa succede se si prova la stessa cosa con 'GetOpenFileName' (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646927%28v=vs.85%29.aspx)? + Ton site web est down ... – ixe013
Puoi verificare lo spazio degli indirizzi del modulo in cui si trova, o lo stack è stato distrutto? –