【问题标题】:Segmentation fault (core dumped) for Struct Pointer Member结构指针成员的分段错误(核心转储)
【发布时间】:2020-04-06 04:35:39
【问题描述】:

请任何人告诉我我在代码中犯了什么错误。

struct aluArgu{
    int noOfArgu;
    char** const argv;
};

int main(int argc, char *argv[])  
{ 
    struct aluArgu* aluArgs = malloc(sizeof(struct aluArgu)+argc*sizeof(char*));
    for (int i = 0; i < argc; i++)
    {
            aluArgs->argv[i] = malloc(strlen(argv[i])+1);
            strcpy(aluArgs->argv[i],argv[i]);
    }
    aluArgs->noOfArgu = argc;
}

当我运行这样的代码时,我收到错误“分段错误(核心转储)”

gcc filecode.c -o mycprogram

./mycprogram 3 + 4

分段错误(核心转储)

【问题讨论】:

    标签: c segmentation-fault


    【解决方案1】:

    struct aluArgu 的成员 argv 不是数组,它是一个指针。该指针从未被赋值,因此写入aluArgs-&gt;argv[i] 会取消引用一个调用undefined beahvior 的未初始化指针。

    根据您分配结构的方式,您在这里想要的是一个灵活的数组成员

    struct aluArgu{
        int noOfArgu;
        char *argv[];
    };
    

    现在您有了一个实际数组,其中为 argc 项目分配了空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 2021-05-04
      • 2015-05-12
      • 2018-01-05
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多