首页 > 解决方案 > 迭代 3D 数组

问题描述

我不断在我的代码上收到此总线错误 10,但我不知道为什么。

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

#define SIZE 100

int main() {

    char input[SIZE];

    int dummy[SIZE];

    int array[SIZE][SIZE][SIZE];

    int set=-1;
    int sequence=0;


    while (1==1) {
       if (fgets(input, SIZE-1, stdin) == NULL){
         printf("Input Error.");
         break;
       }else {

         char* s;

         for (s = input; (*s != '\n') && isspace(*s); s++){
            ; 
         }

         if (*s == 'f'){ //start of finish

            break; 

         } else if (*s == 'S'){ //start of SET

            set++;

         } else{

            sscanf(input, "%d: %d, %d, %d, %d, %d", &dummy[0], 
            &dummy[1], &dummy[2], &dummy[3], &dummy[4], 
            &dummy[5]);

            array[set][sequence][0]=dummy[0];

            array[set][sequence][1]= 
            dummy[1]+dummy[2]+dummy[3]+dummy[4]+dummy[5];

            sequence++;

         }

       }
     }

    for (int i=0; i<sizeof(array); i++ ){
        printf("SET %d\n", i+1);
        for (int j=0; j<sequence;j++){
            printf("%d", array[i][j][0]);
            for (int k=0; k<=5; k++){
                printf("%d\n", array[i][j][1]);
            }
        }
    }

    return 0;
}

基本上,如果我输入了一定数量的集合和一系列数字。像这样:

SET 1

1: 5,5,6,5
2: 3,4,5,5
3: 3,4,5,6

SET 2

1: 5,7,8,7
2: 5,5,5,6


finish

我想为给定集合中的每个序列输出序列号和冒号后所有数字的总和。所以它看起来像这样。

SET 1
1 21
2 17
3 18

SET 2
1 27
2 21

但是,当我尝试执行我的代码时,我得到总线错误:10。我尝试调整数组的大小,但现在我无法遍历我的数组,因为它一直返回一堆随机数。喜欢:

-34618613832766
32766
32766
32766
32766
32766
1178023731825050672
825050672
825050672

这些数字来自哪里?谢谢。

标签: carrayssumsequencebus

解决方案


您的数组很可能对于堆栈来说太大了。请参阅您的编译器手册,了解如何增加堆栈大小或使用malloc().


推荐阅读