【问题标题】:segmentation fault memory dumped分段错误内存转储
【发布时间】:2019-04-15 12:53:44
【问题描述】:

我有以下代码。当我将数组“ADDRESS.Person”写入任何值时,出现“分段错误内存转储”的错误。请任何人帮我解决一个问题。

#include <stdio.h>

typedef struct
{
    char Person[15];
} stName;

typedef struct
{
    stName      Name;
} stSociety;

stSociety* SOCIETY;

#define ADDRESS    SOCIETY->Name


int main()
{

    int i;

    for (i=0; i<32; i++)
    {
        ADDRESS.Person[i] = 0;
    }

    printf("ADDRESS.Person=%s\n", ADDRESS.Person);

    printf("Finished");
    return 0;
}

【问题讨论】:

  • SOCIETY 指向哪里?您需要在取消引用之前使其指向有效内存。
  • Personchar[15],但您从0 写到31?此外,您永远不会分配 SOCIETY 或指向已分配的对象。
  • 顺便说一句:#define ADDRESS SOCIETY-&gt;Name 是一个非常糟糕的主意,它只会给你的代码增加混乱。并且所有大写标识符都应该只用于宏,这是按照惯例。
  • 也告诉我们您想要达到的目标,然后我们可以帮助您走向正确的方向。你的代码应该打印什么?

标签: c arrays string structure


【解决方案1】:

您刚刚声明了结构,您还需要创建它们,因此,SOCIETY 没有指向任何内容。此外,您正在迭代 32 个值,而 char 数组中只有 15 个。我已经修改了代码,希望你会在这里得到一个想法

#include <stdio.h>

typedef struct
{
    char Person[15];
} stName;

typedef struct
{
    stName      Name;
} stSociety;

#define ADDRESS    SOCIETY->Name


int main()
{

stSociety* SOCIETY,sample;
SOCIETY = &sample;


    int i;

    for (i=0; i<15; i++)
    {
       ADDRESS.Person[i] = '0';

    }

    printf("ADDRESS.Person=%s\n", ADDRESS.Person);

    printf("Finished");
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 2020-07-17
    • 1970-01-01
    • 2014-08-04
    • 2012-11-19
    • 1970-01-01
    • 2013-08-20
    • 2015-06-25
    相关资源
    最近更新 更多