【问题标题】:Bad access in XcodeXcode 中的错误访问
【发布时间】:2015-09-19 13:47:18
【问题描述】:

我写了一个产生以下错误的代码:

线程 1:EXC_BAD_ACCESS(代码=1,地址=0x7.....)

我希望该程序将国家、州、城市和商店链接到一个结构中。但是当我尝试运行我的程序时,它给了我你在上面看到的错误。

我已经尝试删除strcpyfor,但错误仍然存​​在。所以错误必须在结构内。我做错了什么?

#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;
}

【问题讨论】:

  • 注意:嵌套结构中的成员无需使用不同的名称。 country.state.city.namecountry.state.city.cityname 更好阅读
  • @Olaf 谢谢。
  • 对不起我的愚蠢评论和回答。你的代码看起来不错。删除 strcpys 和循环以及 printf 时是否收到错误?
  • 所以我的行是正确的国家之前的 & 和商店名称之后的 [0]?你给我看的代码和我写的代码有什么区别?正如我在问题中所说,我试过了。

标签: c xcode struct xcode7 strcpy


【解决方案1】:

结构体的大小为 69043124 字节,堆栈无法容纳。

由于不考虑线程安全,因此可以将结构设为static

int main(void) {
    static struct country {

【讨论】:

  • 对此我能做些什么?
  • @S.Eberl 更新了我的答案。
  • 谢谢!为什么堆栈中的内容太多但作为静态结构工作?
  • 在 Linux 上,标准堆栈大小为 8 MiB。使用static,结构存储在全局变量中,内核在进程启动之前分配了足够的内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
相关资源
最近更新 更多