【问题标题】:segmentation fault (core dumped) when trying to enter a for loop尝试进入 for 循环时出现分段错误(核心转储)
【发布时间】:2016-09-01 12:07:19
【问题描述】:

我的代码是:

int main (void){

    int i,j,k,x;
    .
    .
    .
    printf("before loop\n");

    for (x=0; x<5; x++){
        printf("loop %d",x);
        //do something...
    }
    .
    .
    .
return 0;
}

它打印“循环前”,然后给出分段错误(核心转储),因此不打印任何“循环#”。 有人遇到过吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow!你介意创建一个MCVE吗?
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码.没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整且可验证的示例。
  • 您是否尝试过在调试器中捕获崩溃?它发生在您的代码中的哪个位置?所有涉及的变量的值是多少?您是否尝试过使用诸如Valgrind 之类的内存调试器?您在构建时使用哪些优化标志(如果有)?最后,如果没有Minimal, Complete, and Verifiable Example,真的不可能为您提供适当的帮助。
  • 你得到这个是因为问题中不存在的代码中的一些错误......
  • printf("loop %d",x); 更改为printf("loop %d\n",x); 是一个非常好的主意,因此输出会立即显示,终端上每行一个条目,而不是坐在标准输出缓冲区中,直到缓冲区溢出,或者执行了输入操作,或者其他一些代码输出了“\n”。

标签: c eclipse for-loop segmentation-fault


【解决方案1】:

我确实找到了问题,虽然我不明白为什么它可以解决它。 在内部打印中(循环内) - 最后需要有一个“\n”:

for (x=0; x<5; x++){
    printf("loop %d\n",x);
.
.
.

感谢大家的帮助。

【讨论】:

  • 你一定是改了别的东西,因为原来发布的printf() 语句不会引起段错误事件。 IE。代码中的其他地方还有一些未定义的行为。强烈建议发布整个函数,以便我们帮助您找到问题的实际根源。
  • stdoutstderr 默认情况下是行缓冲的,这意味着用putc()puts()fprintf() 在它们上写入会被保存在缓冲区中,直到\n 是遇到或缓冲区已满。调用fflush() 也会溢出缓冲区。 setvbuf() 函数允许设置流的模式。它可以设置为“不缓冲”、“行缓冲”或“完全缓冲”。
  • 并且您的段错误可能与其他内容有关。您的摘录不包含任何“冒犯性”代码。
猜你喜欢
  • 1970-01-01
  • 2016-08-18
  • 2021-12-20
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多