【问题标题】:c: a.exe has stopped workingc: a.exe 已停止工作
【发布时间】:2016-09-25 22:35:19
【问题描述】:

我正在学习如何用 c 编程:

我想创建一个将数字分隔为数字的程序,从那里我想将它们存储到一个数组中(我已经在下面的代码中完成了)。从那里我需要使用数字打印出数字来帮助生成相同的数字。程序在运行时崩溃了,我不知道为什么。

#include <stdio.h>

int power(int a, int b);

int main()
{
    //Issue: printing out incorrect numbers
    //Fix: Recall that c is treated as a character here when getchar is invoked

    #define MAX_SIZE 100
    const int TEN = 10;
    const int ONE = 1;

    int c;
    int digitPos, digitHolder, numberPower = 0;
    int my_strg[MAX_SIZE];


    printf("\n");

    while (((c = getchar()) != EOF) && (c != '\n'))
    {

        my_strg[digitPos] = c - '0';
        digitPos = digitPos + ONE;
    }

    while (digitPos >= 0)
    {
        int toPower = digitPos - 1;
        printf("%10d", power(TEN, toPower));
        digitPos = digitPos - 1;
    }


    return 0;
}

int power(int a, int b)
{
    if (b == 0)
    {
        return 1;
    }
    else
    {
        return a * power(a, b - 1);
    }

}

目前输出的是返回输入数字所需的幂,但打印后程序崩溃。有人可以指导我如何解决这个问题吗?

【问题讨论】:

  • 尝试初始化digitPos。例如:int digitPos = 0
  • while (digitPos &gt;= 0) --> while (digitPos &gt; 0)
  • @BLUEPIXY 因为我无法重新创建 OP 的堆栈粉碎(这就是我监督实际问题的原因。我希望 ;-))我试图找出原因,似乎 GCC(这里是 4.9)能够使用-O2 及更高版本将其优化为尾递归。这与 GCC 的 wrap-around signed int 溢出一起使它工作,但是,是的,它仍然是未定义的行为,当然。
  • 在将第二个“while”循环更改为“for”循环后,我能够修复它

标签: c arrays function crash


【解决方案1】:

将while条件while (digitPos &gt;= 0)改为while (digitPos &gt; 0)

因为当digipos==0 --> toPower==-1 --> power(TEN, toPower) 崩溃

除了这个小问题你的代码很好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2016-04-26
    相关资源
    最近更新 更多