为什么总有例外?

Why there's always exception?

我正在写一个大数加函数,使用数组

#define MAXLEN 10

int * plus(int *a, int *b) {
    int *result;
    int tmp;
    int add = 0;
    result = (int *)malloc(MAXLEN); // A breakpoint exception was triggered
    for (int i = MAXLEN - 1; i >= 0; i--) {
        tmp = a[i] + b[i] + add;
        add = 0;
        if (tmp / 10) {
            add = tmp / 10;
            tmp = tmp % 10;
        }
        result[i] = tmp;
    }
    return result;
}

malloc 行总是有异常,但在其他函数中 malloc() 运行良好。

这是怎么发生的?

以下是所有代码:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXLEN 10

int * plus(int *a, int *b) {
    int *result;
    int tmp;
    int add = 0;
    result = (int *)malloc(MAXLEN);
    for (int i = MAXLEN - 1; i >= 0; i--) {
        tmp = a[i] + b[i] + add;
        add = 0;
        if (tmp / 10) {
            add = tmp / 10;
            tmp = tmp % 10;
        }
        result[i] = tmp;
    }
    return result;
}

void deliver(int *a, int *b) {
    for (int i = 0; i < MAXLEN; i++) {
        a[i] = b[i];
    }
}

void init_int(int *a) {
    for (int i = 0; i < MAXLEN; i++) {
        a[i] = 0;
    }
}

int * numWays(int n) {
    int *a, *b, *c, *sum;
    int j;
    a = (int *)malloc(MAXLEN);
    b = (int *)malloc(MAXLEN);
    c = (int *)malloc(MAXLEN);
    init_int(a);
    init_int(b);
    init_int(c);
    init_int(sum);
    a[MAXLEN - 1] = 1;
    b[MAXLEN - 1] = 1;
    c[MAXLEN - 1] = 2;
    for (int i = 0; i < n; i++) {
        sum = plus(plus(a, b), c);

        deliver(a, b);
        deliver(b, c);
        deliver(c, sum);
    }
    return a;
}

int main()
{
    int print_flag = 0;
    int *num;
    num = (int *)malloc(MAXLEN);
    num = numWays(4);
    for (int i = 0; i < MAXLEN; i++) {
        if (num[i]) {
            print_flag = 1;
        }
        if (print_flag) {
            printf("%d", num[i]);
        }
    }
    printf("\n");
    return 0;
}

题目是如果青蛙每次能跳1、2或3步,它能跳n步多少种方法,我要确切的数字。

变化:

result = (int *)malloc(MAXLEN);

对此:

result = malloc(MAXLEN * sizeof(int))

因为您想动态分配等于 int 大小的内存,乘以 MAXLEN

There's always exception on the malloc line..

你的意思是编译错误。例外是更高级的概念,您可以稍后学习。

PS:Do I cast the result of malloc?