Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual Studio 2013中出现奇怪的内部编译器错误_C++_Visual Studio - Fatal编程技术网

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;
}