分段错误: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,你声明vint 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 函数的主要内容,如果未能解决你的问题,请参考以下文章

C函数调用分段错误[重复]

sort函数C ++分段错误

C ++ 11分段错误试图将数组(<算法>)动态复制到向量中

为啥写作主要;在 C 中给出一个段错误

在 C 中创建大型数组时出现分段错误

C 中 Trie 实现中的分段错误