2012-12-05 8 views
5

Was mit dem folgenden Code (Abstürze) falsch ist:doppelt auf das `unsigned long long` verursacht Speicher (Stack?) Korruption

#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

Es in x64 funktioniert sowie wenn wir die unsigned long long zu long long oder sogar unsigned long

ändern Dieses Code-Snippet stürzt ab. In anderen Szenarien werden die Adressen der Funktionsparameter geändert.

Ich vermute, es hat etwas mit _stol2 zu tun hat, die die double zu unsigned long long

+0

Probieren Sie es ohne das erste Argument, die Zeichenfolge. – unwind

+1

Haben Sie dieses MWE getestet? Es ist nichts falsch daran visuell, nichts falsch mit der Spezifikation, nichts falsch damit mit den mehreren Compilern, die ich habe (aber ich habe kein Visual Studio). –

+0

Es funktioniert wie erwartet auf Visual Studio 2010/debug/win32, ich kann es im Moment 2012 nicht ausprobieren, aber es sollte soweit ich weiß mit jedem Compiler funktionieren. – jcoder

Antwort

Verwandte Themen