分段故障:11 - C功能

时间:2015-09-19 15:44:07

标签: c++ nvcc

我使用此代码“分段错误:11”,我找不到解决方案

static const int N = 512;
static const int M = 64;
static const int K = sizeof(int) * 8;
static const int SZ = N*M / K;

void readFromFile(int *v);

int main(void){
    int v[SZ];
    readFromFile(v);
 }

void readFromFile(int *v) {
    ifstream f;
    f.open("...path/file.txt");
    char c = f.get();
    int i = 0;
    while (f.good()) {
       v[i] = c - '0';
       c = f.get();
       i++;
   }
   f.close();
}

我有一个int数组和一个用来填充数组的文件。 它是用于填充cuda计算的int数组的一段代码。 我正在使用nsight和nvcc。

1 个答案:

答案 0 :(得分:2)

您的代码显示为N = 512,并且您将v声明为int v[N]; 但是,如果您的文件的字符数超过N,那么i会大于N,并且当您访问v的无效索引时会生成细分错误。

int i = 0;
while (f.good()) {
   v[i] = c - '0';
   c = f.get();
   i++;                    //No checking if it is greater than N
}

实际上最好使用

char c;
int i = 0;
while ((c=f.get())!=EOF) {
   v[i] = c - '0';
   i++;
}

您还应该检查i的限制以进一步减少错误。