分段错误:11 - C 函数
Posted
技术标签:
【中文标题】分段错误:11 - C 函数【英文标题】:Segmentation fault: 11 - C function 【发布时间】:2015-09-19 15:44:07 【问题描述】:我的这段代码出现“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 数组和一个用于填充数组的文件。 这是一段用于填充int数组以进行cuda计算的代码。 我正在使用 nsight 和 nvcc。
【问题讨论】:
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。 这真的是真正的代码吗? 请附上相关代码,特别是f
中的计算和N
的定义。
如果您遇到问题,CUDA 可能会让您有些不知所措。通过 valgrind 运行您的代码,以获取有关您超出范围valgrind ./a.out
的更多详细信息
你应该打开你的编译器设置,看看究竟是什么static const int SZ = N*M / K;
【参考方案1】:
你的代码是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
的限制以进一步减少错误。
【讨论】:
尺寸相同。我在 readFromFile 中添加了一个打印,但在调用函数之前执行结束。 初始化数组不止于此,可能一些空白会导致问题。您可以在文件中放入一些少量字符进行调试。以上是关于分段错误:11 - C 函数的主要内容,如果未能解决你的问题,请参考以下文章