2012-12-05 15 views
5

Cosa c'è di sbagliato con il seguente codice (gli arresti):Doppio a `unsigned long long` provoca memoria (pila?) La corruzione

#include <string> 
#include <iostream> 

void foo(std::string str, unsigned long long val) 
{ 
    std::cout<< str<< " "<< val<< std::endl; // Crashes if commented as well 
} 

int main() 
{ 
    double d = 30.0; 
    foo("abc", d); 
} 

Visual Studio 2012/Debug/Win32

Funziona in x64 così come se cambiamo il unsigned long long a long long o anche unsigned long

Questo frammento di codice si arresta in modo anomalo. In altri scenari vengono modificati gli indirizzi dei parametri di funzione.

ho il sospetto che abbia qualcosa a che fare con _stol2 che converte il double a unsigned long long

+0

provare senza l'argomento iniziale, la stringa. – unwind

+1

Avete testato questo MWE? Non c'è niente di sbagliato visivamente, non c'è niente di sbagliato in questo con le specifiche, non c'è niente di sbagliato in questo con i compilatori multipli che ho (ma non ho Visual Studio). –

+0

Funziona come previsto su Visual Studio 2010/debug/win32, non posso provarlo sul 2012 al momento ma dovrebbe funzionare su qualsiasi compilatore per quanto ne so. – jcoder

risposta

Problemi correlati