2012-12-05 31 views
5

什么是错用下面的代码(崩溃):双到'无符号长long`导致内存(堆栈?)腐败

#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 /调试/ Win32的

它工作在64位以及如果我们将unsigned long long更改为long long甚至unsigned long

此代码段崩溃。在其他情况下,功能参数的地址被改变。

我怀疑它是与_stol2doubleunsigned long long

+0

尝试没有初始参数,字符串。 – unwind

+1

你测试了这个MWE吗?它在视觉上没有什么问题,每个规范都没有错,使用我拥有的多个编译器没有错(但我没有Visual Studio)。 –

+0

它在Visual Studio 2010/debug/win32上按预期工作,我目前无法在2012年试用它,但据我所知它应该可以在任何编译器上工作。 – jcoder

回答