C++ 分段错误:11-C函数
这段代码有“分段错误:11”,我找不到解决方案C++ 分段错误:11-C函数,c++,nvcc,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
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。您的代码表示
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
的限制,以进一步减少错误。寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现此问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的、可验证的示例。这真的是真实的代码吗?请包括相关代码,特别是f
中的计算和N
的定义。如果您在这方面遇到问题,CUDA可能有点过头了。通过valgrind运行您的代码,以获得关于您将要越界的更多详细信息valgrind./a.out
您应该打开编译器设置并查看什么是static const int SZ=N*M/K;尺寸相同。我在readFromFile中添加了一个打印,但在调用函数之前执行结束。初始化数组的次数越多,可能会有一些空白导致问题。您可以在文件中放入少量字符进行调试。