Visual Studios предупреждает меня о разыменовании нулевого указателя - PullRequest
1 голос
/ 11 июля 2019

Я просто пытаюсь использовать malloc, и код работает нормально, но визуальные студии вызывают у меня проблемы с этим.Это то, как вы должны делать эти вещи, или я делаю что-то не так?

Предупреждение отображается прямо в строке:

chadley->name = "chadley"
#include <stdio.h>
#include <stdlib.h>


typedef struct {
    int age;
    char *name;
} Person;


int main()
{
    Person bradley;
    bradley.name = "bradley";
    bradley.age = 2334444;

    Person *chadley = malloc(sizeof(Person));
    chadley->name = "chadley";
    chadley->age = 234;

    printf("Person object %s of age %d", chadley->name, chadley->age);
}

Код ошибки: Разыменование NULLуказатель 'chadley'

Ответы [ 2 ]

3 голосов
/ 11 июля 2019

A Person * может быть нулевым указателем. Это относится к значению, а не к типу.

Если не удастся успешно выделить память, malloc вернет значение NULL. Вы должны всегда проверять значение, возвращаемое из malloc перед его использованием.

Вы можете проверить, что возвращенный указатель действителен, выполнив что-то вроде:

Person *chadley = malloc(sizeof(Person));

if (!chadley) {
    /* The allocation failed, don't continue. */
    return 1;
}

chadley->name = "chadley";
chadley->age = 234;
1 голос
/ 11 июля 2019
#include <stdio.h>
#include <stdlib.h>


typedef struct {
    int age;
    char *name;
} Person;


int main()
{
    Person bradley;
    bradley.name = "bradley";
    bradley.age = 2334444;

    Person *chadley = malloc(sizeof(Person));
    if (chadley == NULL) return 1;
    chadley->name = "chadley";
    chadley->age = 234;
    printf("Person object %s of age %d", chadley->name, chadley->age);
}

работает спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...