即使在编译之后也会出现分段错误?

时间:2015-10-11 15:51:47

标签: c

{{1}}

尝试反转整数值以及符号的变化,并在数字中找到数字的出现。

基本上我猜我的指针做错了。 任何人都可以帮助我弄清楚我哪里出错了?

2 个答案:

答案 0 :(得分:4)

您永远不会在result中初始化main()而您永远不会从myCount()返回任何内容。

只需在main()

中执行此操作即可
result = myCount();

请记得检查NULL

并在myCount()

struct Result * myCount(int n, int d)
{
    struct Result *result;
    int rev_dig;
    int last_dig;
    int digit;
    int count;

    count = 0;
    result = malloc(sizeof (struct  Result));
    if (result == NULL)
        return NULL; /* handle the error in the caller function */        
    while (n != 0)
    {
        last_dig = n % 10;
        rev_dig = rev_dig * 10 + last_dig;
        n = n / 10;
    }
    rev_dig = rev_dig * (-1);   
    result->reversen = rev_dig;    
    while (n >= 1)
    {
        digit = n % 10;
        if (digit == d)
            count++;
        n = n / 10;
    }
    result->count = count;
    return result;
}

修正:

  1. 如果NULL失败,则返回malloc(),模仿malloc()的行为。返回指向新分配的内存的指针的函数通常会这样做,例如strdup()

  2. 删除了malloc()

  3. 的超级演员阵容
  4. 在某个时候退回result

  5. 不从声明为返回内容的函数返回值未定义行为

答案 1 :(得分:1)

您正在尝试访问从未初始化的结构指针。