Ошибка шины при работе с двумерным массивом

#c #arrays

#c #массивы

Вопрос:

Ниже приведен мой код:

 #include <stdio.h>
#include <math.h>


void main () {
    int my_data[4][500];

    int myDataBinary[500] = {0};
    int index1 =0;

    my_data[0][1] = 1; 
    my_data[0][3] = 3; 
    my_data[0][5] = 9;
    my_data[0][4] = 10;

    for(int i=0; i<sizeof(my_data)/sizeof(int);i  )
    {   
        if(my_data[0][i] > 0){
            index1 = my_data[0][i];
            myDataBinary[index1] = 1;
            printf("my data %d = %dn",index1,myDataBinary[index1]);
        }
    }
}
  

Вывод, который я вижу, является:

 my data 1 = 1
my data 3 = 1
my data 10 = 1
my data 9 = 1
Bus error
  

Я предполагаю, что эта ошибка в конце связана с sizeof, который я использую в «цикле for». Я хочу запускать свой цикл только для тех значений внутри моего двумерного массива. Есть идеи, где я ошибаюсь.

Комментарии:

1. На самом деле вы сами дали ответ — попробуйте использовать sizeof(my_data[0]) /sizeof(int). Или, (на мой взгляд), лучше использовать константы как для объявления массива, так и для цикла for.

Ответ №1:

Вместо этого:

 for(int i=0; i<sizeof(my_data)/sizeof(int);i  )
  

Вы, вероятно, хотите:

 for(int i=0; i<sizeof(my_data[0])/sizeof(int); i  )
  

Комментарии:

1. если я это сделаю, то получу только «мои данные 1 = 1, мои данные 3 = 1», но не мои данные 9 и не мои данные 10