我使用此代码“分段错误: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。
答案 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
的限制以进一步减少错误。