以下这段代码用于生成质数,在Debug模式下编译和运行正常,但在Release模式下构建时总是似乎会导致编译器崩溃:
如果有其他正在运行Visual Studio的人愿意花时间尝试在发布模式下构建代码(我已经删除了任何外部依赖项,所以应该只是复制和粘贴),我将不胜感激。
更新:经过进一步审查,似乎即使对于简单的“Hello World”代码,mt.exe在我的发布模式下仍然会崩溃,因此我的安装肯定存在问题。我打算重新安装所有内容,这应该可以解决问题。版主们,请随时关闭此问题。
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <iostream>
template<typename T> class PrimeGen {
struct Elim {
T p ;
T e ;
} ;
class Elim_cmp {
public:
bool operator()(const Elim& e1, const Elim& e2) { return e1.e > e2.e; }
} ;
std::vector<Elim> elim_heap ;
T last ;
public:
PrimeGen() {
Elim e0 = { 2, 4 } ;
elim_heap.reserve(1024) ;
elim_heap.push_back(e0) ;
last = 2 ;
}
T next() {
T n = last ;
bool prime;
do {
n ++ ;
prime = true ;
while(n == elim_heap.front().e) {
if(prime) prime = false ;
std::pop_heap(elim_heap.begin(), elim_heap.end(), Elim_cmp()) ;
Elim& elim = elim_heap.back() ;
elim.e = elim.p + n ;
std::push_heap(elim_heap.begin(), elim_heap.end(), Elim_cmp()) ;
}
} while(!prime) ;
Elim e = { n, 2*n } ;
elim_heap.push_back( e ) ;
std::push_heap(elim_heap.begin(), elim_heap.end(), Elim_cmp()) ;
return last = n ;
}
} ;
int main()
{
using namespace std ;
PrimeGen<unsigned int> pgen ;
for(int i=0; i<100; i++) {
cout << pgen.next() << endl ;
}
system("pause") ;
}
有人能看出这是为什么吗?还是我遇到了那些罕见的情况之一,编译器而不是代码应该受到责备?
我收到的错误如下:
error PRJ0002 : Error result -1073741819 returned from 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe'.
如果有其他正在运行Visual Studio的人愿意花时间尝试在发布模式下构建代码(我已经删除了任何外部依赖项,所以应该只是复制和粘贴),我将不胜感激。
更新:经过进一步审查,似乎即使对于简单的“Hello World”代码,mt.exe在我的发布模式下仍然会崩溃,因此我的安装肯定存在问题。我打算重新安装所有内容,这应该可以解决问题。版主们,请随时关闭此问题。