分割故障:11 - C功能

Segmentation fault: 11 - C function

本文关键字:功能 故障 分割      更新时间:2023-10-16

我有"分割故障: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数组的代码。我用的是insight和nvcc

您的代码是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的限制,以进一步减少错误。