段错误:11 - C 函数

Segmentation fault: 11 - C function

我有 "segmentation fault: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计算的代码。 我正在使用 nsight 和 nvcc。

你的代码说 N = 512 并且你声明 vint 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
}

其实还是用like比较好

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

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