2015-09-19 3 views
-1

Я написал код, который производит следующее сообщение об ошибке:Плохой доступ в Xcode

Thread 1: EXC_BAD_ACCESS (code=1, adress=0x7.....)

Я хочу, чтобы программа, чтобы связать страны, штаты, города и магазины в пределах структуры. Но когда я пытаюсь запустить свою программу, это дает мне ошибку, которую вы видите выше.

Я уже пробовал удалить strcpy и for, но ошибка все еще происходит. Таким образом, ошибка должна быть внутри структур. Что я делаю неправильно?

#include <stdio.h> 
#include <string.h> 

#define SMAX 16 
#define CMAX 256 
#define SHMAX 300 

int main() { 
    struct country { 
     char cname[50]; 
     struct state { 
      char sname[50]; 
      struct city { 
       char cityname[50]; 
       struct shop { 
        char shopname[50]; 
        int countshop; 
       } shop[SHMAX]; 
       int countcity; 
      } city[CMAX]; 
      int countstate; 
     } state[SMAX]; 
    } country; 

    // country = Germany; 

    strcpy(country.state[0].sname, "bayern"); 
    strcpy(country.state[1].sname, "berlin"); 
    strcpy(country.state[0].city[0].cityname, "ingolstadt"); 
    strcpy(country.state[0].city[0].shop[0].shopname, "westpark"); 
    strcpy(country.state[0].city[0].shop[1].shopname, "edeka"); 

    for (int i = 0; i < SHMAX; i++) { 
     printf("%s\n", country.state[0].city[0].shop[i].shopname); 
    } 



    return 0; 
} 
+0

Примечание: нет необходимости использовать разные имена для членов вложенных структур. 'country.state.city.name' лучше читать, чем' country.state.city.cityname' – Olaf

+0

@Olaf Спасибо за это. – PeterPan

+0

Извините за мой глупый комментарий и ответ раньше. Ваш код выглядит отлично. Вы получаете ошибку при удалении 'strcpy' и цикла и' printf'? –

ответ

2

Размер структуры - 69043124 байт, что слишком много, чтобы поместиться в стеке.

Как безопасности потока не касается, то структура может быть static:

int main(void) { 
    static struct country { 
+0

Что я могу сделать по этому поводу? – PeterPan

+0

@ S.Eberl Обновлен мой ответ. – 4566976

+0

Спасибо! Почему это слишком много, чтобы вписаться в стек, но работает как статическая структура? – PeterPan

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