Ошибка сегментации на getenv C?

Итак, что помогает мне, когда кодирование объединяет все, что я выучил, в один случайный проект. Чтобы лучше помочь мне и понять при кодировании. Некоторое время назад я узнал о getenv и тестировал его. Работал нормально, пока я не вернулся к работе над обучением c и снова не открыл проект...

#include <stdio.h>
#include <strings.h>
#include <windows.h>
#include <stdlib.h>

struct envvariabl3s
{
    char *userprofile;
    char *systemroot;

};

void loginscreen(void)
{
    int testbit = 4000000000;
    struct envvariabl3s *envariable;
    char *memtes;
    printf("\nWelcome to the login screen...\n");
    memtes = malloc(20 * sizeof(char));
    if(memtes == 0)
    {
        printf("Error: Not enough memory!");
    }
    strcpy(memtes, "Herp De Derp");

    printf("\nDynamically allocated memory is %s", memtes);
    free(memtes);

    envariable->userprofile = getenv("USERPROFILE"); //SEGFAULT HERE
    envariable->systemroot = getenv("SystemRoot");

    printf("\nUserProfile is: %s", envariable->userprofile);
    printf("\nSystem Root is: %s", envariable->systemroot);
    printf("%d", sizeof(testbit));
}

1 ответ

Решение

Envvariable - это указатель на структуру, но вы никогда не создавали структуру, на которую она могла бы указывать. Он просто указывает на случайную память, и назначение в структуру, которой там нет, вызывает сбой. Вам нужна фактическая структура, возможно выделенная с помощью malloc(), чтобы указатель указывал на.

Другие вопросы по тегам