链接分配值时被卡住

时间:2018-07-26 21:20:52

标签: c arrays malloc realloc

我正在解决以下问题:

5.2递增任意精度整数

编写一个程序,该程序将编码非负十进制整数D的数字数组作为输入,并更新该数组以表示整数D + 1。例如,如果输入为<1,2,9>,则应将数组更新为<1,3,0>。即使您的算法是使用具有有限精度算法的语言实现的,它也应该可以工作。

我的策略是:

首先反转数组输入,以便更轻松地增加数组并考虑进位数字。

使用malloc将结果数字存储在动态分配的数组中。因此,如果结果中的位数超出输入数组的容量,则动态分配的数组可以使用realloc扩展内存以包括最后一个进位数字。

反转动态分配的数组,使其顺序正确。

将指针返回到动态分配的数组的第一个元素。

我只是想使链接列表存储一个int值:

下面是代码:

#include <stdio.h>
#include <stdlib.h>
#include "Node.h"

void reverse (int * a, int len)
{
    for ( int i = 0, j = len - 1; i < j; i++, j--)
    {
        int temp = a[i];

        a[i] = a[j];

        a[j] = temp;

    }

}

int * inc_arr(int *a, int len)
{

    int result_len = 0;

    reverse(a,len); int * a_end = (a + len - 1);

    *a = *a + 1; int carry = *a/10; *a = *a%10; 

    Node * result = (Node *)malloc(sizeof(Node));

    Node * result_zero = result;

    result->value = *a; result = result->link; result_len++;

    while (a <= a_end)
    {
        if ( carry != 0)
        {
            result->value = (carry + *a)%10; 

            carry = (carry + *a)/10;
        }

        else
        { result->value = *a; carry = 0;}

        result = result->link; result_len++;

        a++;
    }

    if ( carry != 0)
    { 
        result->value = carry; result_len++;

        result->link = NULL;
    }

    else
    { result = NULL; }

    int a_final[result_len]; int *a_f = a_final;

    while (result_zero != NULL)
    {
        *a_f++ = (result_zero->value);

        result_zero = result_zero->link;
    }

    reverse(a_final,result_len);

    return a_final;

}


int main()
{
    int a[3] = {1,2,9};

    int * b = inc_arr(a,3);
}

但是,在以下代码行:

result->value = (carry + *a)%10; 

调试器演示计算机拒绝超出此代码范围 线,无论我尝试使用 调试器。这是什么原因呢?我最终得到一个:

fish:'./exercise_5-2.o'被信号SIGSEGV(地址边界错误)终止

0 个答案:

没有答案