我正在帮助表弟做一些他的作业。功课是使用数组将两个大数字加在一起,但是我遇到了一个问题。每当我运行程序时,它都会给我“分段错误(核心转储)”错误。这通常是内存问题,但我已尝试用malloc控制结果数组的大小,但没有成功。你能发现我的错误吗?
来源:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, j, h;
int a[] = {0, 4, 5, 9, 2, 7, 4, 9, 5, 7, 1, 6, 2, 0, 3, 0};
int b[] = {0, 2, 7, 8, 4, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int *result = (int *) malloc(17*sizeof(int));
for (i = 1; i < sizeof(result); i++) {
if (a[i] + b[i] > 9){
result[i] = a[i] + b[i] - 10;
result[i-1] += 1;
}
else{
result[i] = a[i] + b[i];
}
for (j = 0; h < sizeof(result); j++) {
if (result[j] > 9){
result[j] -= 10;
result[j-1] += 1;
}
}
}
printf("Result: ");
for (h = 0; h < sizeof(result); h++) {
printf("%d", result[h]);
}
}
答案 0 :(得分:1)
在这个循环中
for (j = 0; h < sizeof(result); j++) {
您使用未初始化的变量h。因此循环可以是无限的,因为在这种情况下的程序行为是未定义的。
考虑到sizeof( int * )
与示例sizeof( int[17] )
不同,通常sizeof( int * )
等于4或8.结果的类型为int *
;)
但无论如何你的代码都错了。你应该重新设计程序的逻辑。
答案 1 :(得分:0)
首先,我建议从最低位到最高位 - 这样可以避免O(n ^ 2)的复杂性。
问题是内部循环中的sizeof(result):sizeof返回结果数组占用的字节数,而不是元素数。