struct name* ошибка

У меня такой вопрос. У меня есть структура, которую нужно заполнить соответствующими данными, полученными из мною написанной функции. Вроде все сделал правильно, но при попытке вывода пишет Segmentation Fault. P.S. все типы данных должны быть в том виде, в котором они заданны (не могу const char* изменить на char* и тд)

Код:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct test {
    char* name; 
    int age;  
};

struct test* create_track(const char* name, int age) {
    if(name == "" || strlen(name) > 100) {
        return NULL;
    }
    struct test* new_test = (struct test*)malloc(sizeof(struct test));
    strcpy(new_test->name, name);
    new_test->age = age;
    return new_test;
}

int main() {
    struct test* track = create_track("John", 26);
    printf("%s %d\n", track->name, track->age);
}

Заранее всем спасибо!


Ответы (1 шт):

Автор решения: Harry

Ну, проверять name == "" бессмысленно - потому что такое сравнение сравнивает указатель name c указателем на строку "" - с очевидным результатом: они не равны. C-строки нужно сравнивать с помощью функций типа strcmp.

После выделения памяти

struct test* new_test = (struct test*)malloc(sizeof(struct test));

вы копируете строку

strcpy(new_test->name, name);

куда? Вы никак не инициализировали выделенную память, так сто в поле name какое-то левое значение, адрес памяти где-то, куда вы пытаетесь писать.

Нужно выделить память и для строки, куда планируете копировать - типа

new_test->name = malloc(....);

Да, и еще - если вы действительно компилируете код как C, а не как С++ - то можете опустить приведения типов перед вызовами malloc. Они необходимы в C++.

→ Ссылка