Ошибка сегментации на 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(), чтобы указатель указывал на.