C++ 分段错误:11-C函数

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

这段代码有“分段错误: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。

您的代码表示
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中添加了一个打印,但在调用函数之前执行结束。初始化数组的次数越多,可能会有一些空白导致问题。您可以在文件中放入少量字符进行调试。