2010-11-27 46 views
3

保存代码的项目具有所有默认MSVS2008设置。IncrCalcPtrs内部错误 - 当我第二次运行代码时不会重复发生

考虑使用以下代码,我熟悉自己与STL的各种产品:

#include <vector> 
#include <iostream> 
#include <numeric> 

using namespace std; 


template <class T> void print(const vector<T>& l) 
{ // A generic print function for vectors 
    cout << endl << "PV Size of vector is " << l.size() << "\n["; 
    for(int i = 0; i < l.size(); i++) 
    { 
     cout<<l[i]<<","; 
    } 
    cout << "]\n"; 
} 


int main() 
{ 
    vector<double> vec1(4, 2.0); 
    vector<double> vec2(4, 4.0); 
    double init = 0.0; 
    double summation = accumulate(vec1.begin(), vec1.end(), init); 
    cout<<"Summation = "<<summation<<", init is "<<init<<endl; 

    double ip = inner_product(vec1.begin(), vec1.end(), vec2.begin(), init); 
    cout<<"ip = "<<ip<<", init is "<<init<<endl; 

    int size = 6; 
    int seed_value = 2; 
    vector<int> vec3(size, seed_value); 
    vector<int> result(size); 
    partial_sum(vec3.begin(), vec3.end(), result.begin()); 
    cout<<"The partial sum of vec3 is "; 
    print(vec3); 

    int sz = 10; 
    int value = 2; 
    vector<int> vec4(sz); 
    for(int it = 0; it < vec4.size(); it++){ 
     vec4[it] = value; 
     value++; 
    } 
    vector<int> result2(vec4.size()); 
    adjacent_difference(vec4.begin(), vec4.end(), result2.begin()); 
    cout<<"Adjacent differenec of vec4 is "; 
    print(vec4); 

    return(0); 
} 

我第一次尝试运行此我得到以下错误(Windows 7中,Visual Studio 2008中下):

c:\programming\numeric_algorithms_on_vectors.cpp(86) : warning C4018: '<' : signed/unsigned mismatch 

c:\programming\numeric_algorithms_on_vectors.cpp(37) : warning C4018: '<' : signed/unsigned mismatch 

c:\programming\numeric_algorithms_on_vectors.cpp(81) : see reference to function template instantiation 'void print(const std::vector<_Ty> &)' being compiled 

     with 
     [ 
      _Ty=int 
     ] 

Linking... 

numeric_algorithms_on_vectors.obj : fatal error LNK1000: Internal error during  IncrCalcPtrs 
    Version 9.00.30729.01 
    ExceptionCode   = C0000005 
    ExceptionFlags   = 00000000 
    ExceptionAddress   = 00E6B8C0 (00E10000) "C:\Program Files (x86)\Microsoft  Visual Studio 9.0\VC\bin\link.exe" 
    NumberParameters   = 00000002 
    ExceptionInformation[ 0] = 00000000 
    ExceptionInformation[ 1] = 0000001C 
CONTEXT: 
    Eax = 00000000 Esp = 0042EAE8 
    Ebx = 3FFF0000 Ebp = 0042EB04 
    Ecx = 77CB36FA Esi = 4000AF9C 
    Edx = 4000F774 Edi = 00000000 
    Eip = 00E6B8C0 EFlags = 00010293 
    SegCs = 00000023 SegDs = 0000002B 
    SegSs = 0000002B SegEs = 0000002B 
    SegFs = 00000053 SegGs = 0000002B 
    Dr0 = 00000000 Dr3 = 00000000 
    Dr1 = 00000000 Dr6 = 00000000 
    Dr2 = 00000000 Dr7 = 00000000 

然而,点击通过告诉我,我的代码没有编译/正常工作,当我未做任何要对代码进行任何更改再次调试同一代码窗口后,程序工作。有没有原因为什么代码不能编译/链接/运行的第一次,但下次运行完美罚款?

+0

“当我再次调试相同的代码而没有对代码进行任何更改时” - 您真的,真的可以肯定吗?配置设置(如警告级别,代码生成设置,编译器/链接器开关等)如何? – 2010-11-27 14:29:11

+0

@In Silico:是...不变更在第一次和第二次运行之间,代码/配置设置中发生了什么。 – Tryer 2010-11-27 14:33:44

回答

3

这是VS2008 SP1链接器中的一个已知问题。在VS2010中修复,反馈报告is here

我已经看到了这个我自己几次,它只发生在它实际上增量链接。对我来说,它总是通过Build + Rebuild强制完整构建来解决,以便.ilk文件被删除并重新创建。如果仍然不适合您,那么您可以使用Project + Properties,Linker,General,Enable Incremental Linking关闭该功能。

相关问题