2014-02-26 101 views
-2

所以編碼時幫助我把我學到的東西整合到一個隨機項目中。爲了更好地幫助我並理解編碼。我後來才知道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()進行分配,以指向指針。

+0

對不起,我是一個白癡o-e我不小心刪除了這個結構,並沒有意識到它。抱歉! – John

+0

它應該是struct envvariabl3s * envariable,datvar;然後有變化=&datvar; – John

+0

考慮採用在C/C++中始終顯式初始化變量的做法。如果你在聲明的位置初始化你的指針爲'NULL',這將更容易被捕獲。 – jia103