段错误: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
并且你声明 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
}
其实还是用like比较好
char c;
int i = 0;
while ((c=f.get())!=EOF) {
v[i] = c - '0';
i++;
}
并且您还应该检查 i
的限制以进一步减少错误。
我有 "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
并且你声明 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
}
其实还是用like比较好
char c;
int i = 0;
while ((c=f.get())!=EOF) {
v[i] = c - '0';
i++;
}
并且您还应该检查 i
的限制以进一步减少错误。