为什么总有例外?
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?号
我正在写一个大数加函数,使用数组
#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?号