Malloc память для строки C внутри структуры - PullRequest
0 голосов
/ 13 октября 2011

В настоящее время у меня есть следующий код.

    struct qnode
    {
        char *path;
        struct qnode *next;
    }

    typedef struct qnode Node;

На этом этапе мой код завершается ошибкой, однако, когда я пытаюсь распределить пространство для внутри внутри структуры qnode.

void add(Node *front, Node *back,char **path)
{
    /* Create the new node */
    Node *cur = (Node *)malloc(sizeof(Node));

    /* Verify node successfully created */
    if(cur)
    {
            /* Populate Members of Node */
            cur->path = malloc(strlen(*path)); /* fails here */
            printf("Malloc path success");
            cur->path = *path;

У меня естьпроверил, что strlen действительно работает с правильным указателем и действительно возвращает длину размера.По какой-то причине, хотя я получаю ошибку сегментации в этот момент, и я не понимаю, почему.

Fyi Это часть назначения ОДНАКО эта простая строка malloc не является чем-то, что было специально назначено, и не использовалоС языком.Мне разрешено выполнять c ++ по заданию, но я выбрал C, чтобы получить больше знаний о языке.

Спасибо за помощь!

1 Ответ

3 голосов
/ 13 октября 2011

Вы не выделяете достаточно памяти. Вам нужно оставить место для нулевого терминатора. Вы также должны скопировать содержимое строки, а не назначать указатель на строку. Обе эти ошибки приведут к повреждению кучи и объяснят вашу ошибку. Код должен быть таким:

cur->path = malloc(strlen(*path)+1);
printf("Malloc path success");
strcpy(cur->path, *path);

Вы, конечно, можете использовать strdup, если она есть в вашей системе, но учтите, что она не является частью стандарта C.

...