ошибка сегментации сброшена память

#c #arrays #string #structure

#c #массивы #строка #структура

Вопрос:

У меня есть следующий код. Я получил сообщение об ошибке «сброс памяти из-за ошибки сегментации», когда я записываю АДРЕС массива.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=%sn", ADDRESS.Person);

    printf("Finished");
    return 0;
}
 

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

1. Куда SOCIETY указывает is? Вам нужно сделать так, чтобы он указывал на действительную память перед разыменованием.

2. Person это char[15] все же вы пишете от 0 до 31 ? Кроме того, вы никогда не выделяете SOCIETY и не указываете на объект, который был выделен.

3. Кстати: #define ADDRESS SOCIETY->Name это очень плохая идея, она только добавляет путаницы в ваш код. И все идентификаторы заглавных букв должны использоваться только для макросов, это по соглашению.

4. Также расскажите нам, чего вы пытаетесь достичь, тогда мы сможем помочь вам в правильном направлении. Что должен печатать ваш код?

Ответ №1:

Вы только что объявили структуры, вам также нужно их создать, и, следовательно, ОБЩЕСТВО ни на что не указывает.Кроме того, вы перебираете 32 значения, тогда как в массиве символов всего 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 = amp;sample;


    int i;

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

    }

    printf("ADDRESS.Person=%sn", ADDRESS.Person);

    printf("Finished");
    return 0;
}