C++ Visual Studio 2013中出现奇怪的内部编译器错误
在我的一个类C++ Visual Studio 2013中出现奇怪的内部编译器错误,c++,visual-studio,C++,Visual Studio,在我的一个类foo中,我将值插入某个静态成员数组静态无符号整数索引[9][9][9][9],如下所示 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { for (int k = 0; k < 9; k++) { for (int l = 0; l < 9; l++) { if (index[i][j][k][l] != 100) {
foo
中,我将值插入某个静态成员数组静态无符号整数索引[9][9][9][9]
,如下所示
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
for (int k = 0; k < 9; k++) {
for (int l = 0; l < 9; l++) {
if (index[i][j][k][l] != 100) {
setIndex(i, j, k, l, &index[j][i][k][l]);
setIndex(i, j, k, l, &index[i][j][l][k]);
setIndex(i, j, k, l, &index[j][i][l][k]);
setIndex(i, j, k, l, &index[k][l][i][j]);
setIndex(i, j, k, l, &index[k][l][j][i]);
setIndex(i, j, k, l, &index[l][k][i][j]);
setIndex(i, j, k, l, &index[l][k][j][i]);
}
}
}
}
}
它需要
unsigned int foo::getIndex(int i, int j, int k, int l) {
return index[i][j][k][l];
}
当我尝试在Visual Studio 2013下编译此文件时,出现了奇怪的内部编译器错误
error MSB6006: "CL.exe" exited with code -1073740940.
或者,有时也:
fatal error c1001 internal compiler error
现在,如果我只稍微更改代码,例如,在第一行:
int i;
for (int a = 0; a < 9; a++) {
i = a;
[...]
}
foo.cpp:
#include "foo.h"
unsigned int foo::index[9][9][9][9];
void foo::setIndexes() {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
for (int k = 0; k < 9; k++) {
for (int l = 0; l < 9; l++) {
index[i][j][k][l] = 100;
}
}
}
}
setUniqueIndexes();
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
for (int k = 0; k < 9; k++) {
for (int l = 0; l < 9; l++) {
if (index[i][j][k][l] != 100) {
setIndex(i, j, k, l, &index[j][i][k][l]);
setIndex(i, j, k, l, &index[i][j][l][k]);
setIndex(i, j, k, l, &index[j][i][l][k]);
setIndex(i, j, k, l, &index[k][l][i][j]);
setIndex(i, j, k, l, &index[k][l][j][i]);
setIndex(i, j, k, l, &index[l][k][i][j]);
setIndex(i, j, k, l, &index[l][k][j][i]);
}
}
}
}
}
}
void foo::setIndex(int i, int j, int k, int l, unsigned int *p) {
*p = getIndex(i,j,k,l);
}
unsigned int foo::getIndex(int i, int j, int k, int l) {
return index[i][j][k][l];
}
void foo::setUniqueIndexes() {
index[0][0][0][0] = 0;
}
#包括“foo.h”
无符号int foo::index[9][9][9];
void foo::setIndexes(){
对于(int i=0;i<9;i++){
对于(int j=0;j<9;j++){
对于(int k=0;k<9;k++){
对于(int l=0;l<9;l++){
指数[i][j][k][l]=100;
}
}
}
}
setUniqueIndexes();
对于(int i=0;i<9;i++){
对于(int j=0;j<9;j++){
对于(int k=0;k<9;k++){
对于(int l=0;l<9;l++){
如果(指数[i][j][k][l]!=100){
setIndex(i,j,k,l和index[j][i][k][l]);
集合索引(i,j,k,l和索引[i][j][l][k]);
setIndex(i,j,k,l和index[j][i][l][k]);
setIndex(i,j,k,l和index[k][l][i][j]);
setIndex(i,j,k,l和index[k][l][j][i]);
setIndex(i,j,k,l和index[l][k][i][j]);
setIndex(i,j,k,l和index[l][k][j][i]);
}
}
}
}
}
}
void foo::setIndex(int i,int j,int k,int l,unsigned int*p){
*p=指数(i,j,k,l);
}
无符号intfoo::getIndex(inti,intj,intk,intl){
回报指数[i][j][k][l];
}
void foo::setUniqueIndexes(){
指数[0][0][0][0]=0;
}
真正奇怪的是,如果我注释掉函数setIndexes()
前面的一部分,或者删除setUniqueIndexes()
中的语句,它就会编译
注意:这样的代码没有多大意义,我将其减少到再现错误的最小值退出代码看起来像胡言乱语,但MSB6006让我提出了一个问题,这可能会对您有所帮助。强调“可能”;这是一个难以置信的奇怪问题。我的VS2010似乎编译代码很好,至少没有给出任何错误(但我没有尝试运行)。不确定它是否有任何帮助,但退出代码转换为
0xC0000374
,这似乎是某种堆损坏的异常代码。VS 2015运行得很好。是的,这段代码也在我的VS2013中运行。请提供一份
class foo{
public:
static void setIndexes();
static unsigned int getIndex(int i, int j, int k, int l);
private:
static void setUniqueIndexes();
static void setIndex(int i, int j, int k, int l, unsigned int *p);
static unsigned int index[9][9][9][9];
};
#include "foo.h"
unsigned int foo::index[9][9][9][9];
void foo::setIndexes() {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
for (int k = 0; k < 9; k++) {
for (int l = 0; l < 9; l++) {
index[i][j][k][l] = 100;
}
}
}
}
setUniqueIndexes();
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
for (int k = 0; k < 9; k++) {
for (int l = 0; l < 9; l++) {
if (index[i][j][k][l] != 100) {
setIndex(i, j, k, l, &index[j][i][k][l]);
setIndex(i, j, k, l, &index[i][j][l][k]);
setIndex(i, j, k, l, &index[j][i][l][k]);
setIndex(i, j, k, l, &index[k][l][i][j]);
setIndex(i, j, k, l, &index[k][l][j][i]);
setIndex(i, j, k, l, &index[l][k][i][j]);
setIndex(i, j, k, l, &index[l][k][j][i]);
}
}
}
}
}
}
void foo::setIndex(int i, int j, int k, int l, unsigned int *p) {
*p = getIndex(i,j,k,l);
}
unsigned int foo::getIndex(int i, int j, int k, int l) {
return index[i][j][k][l];
}
void foo::setUniqueIndexes() {
index[0][0][0][0] = 0;
}