2014-11-27 5 views
-2

В настоящее время я помогаю моему двоюродному брату с некоторыми домашними заданиями. Домашнее задание состояло в том, чтобы добавить два больших числа вместе, используя массивы, однако я столкнулся с проблемой. Всякий раз, когда я запускаю программу, она дает мне ошибку «segmentation fault (core dumped)». Это, как правило, проблемы с памятью, но я попытался контролировать размер массива результатов с помощью 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]); 
    } 
} 
+4

'for (i = 1; i BLUEPIXY

+3

Учитывая, что вы получили 'result [j-1]' и запустили цикл с помощью 'j = 0', вы фактически можете« переполнить »ваш массив. Вставьте отладочные операторы: напечатайте 'i' и' j' на каждом этапе и посмотрите, где они выходят за пределы диапазона. –

+0

'for (j = 0; h alain

ответ

1

В этом цикле

for (j = 0; h < sizeof(result); j++) { 

использовать переменную час, который не был инициализирован. Таким образом, цикл может быть, например, бесконечным, потому что поведение программы в этом случае не определено. Примите во внимание, что sizeof(int *) не то же самое, как, например, sizeof(int[17]), обычно sizeof(int *) равно 4 или 8. И результат имеет тип int *;)

Но в любом случае ваш код не так. Вы переделываете логику программы.

0

Прежде всего, я бы рекомендовал перейти от наименее значащей цифры к самой значащей цифре, что позволило бы избежать сложности O (n^2).

Проблема заключается в sizeof (result) во внутреннем цикле: sizeof возвращает количество байтов, занятых массивом результатов, а не количество элементов.

Смежные вопросы