2013-07-22 108 views
0

我有一個錯誤「段錯誤SIGSEGV」在我的C代碼:段錯誤SIGSEGV簡單的代碼C

int main(void) 
{ 
    HANDLE h; 

    char *query = malloc(10); 

    h=InitPort("\\\\.\\COM2",57600); 
    query = 0; 
    query=getenv("QUERY_STRING"); 


    if (h==INVALID_HANDLE_VALUE) 
    { 

     printf("Error\n"); 


     return 0; 
    } 

    if (strstr(query,"COMM=W")!=0) 
    { 
     SendData(h,'W'); 
    } 

    return 0; 
} 

我讀了很多有關意見的分配內存和最終使用malloc()函數,但它沒有工作。

在我的代碼的所有功能:

HANDLE InitPort(char* PORT,unsigned long BAUD_RATE) 
{ 
    HANDLE h; 
    DCB d; 
    h=CreateFileA(PORT,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0, 0); 
    GetCommState(h,&d); 
    d.BaudRate=BAUD_RATE; 
    d.fBinary=1; 
    d.fParity=0; 
    d.ByteSize=8; 
    d.StopBits=ONESTOPBIT; 
    SetCommState(h,&d); 
    return h; 
} 

void SendData(HANDLE h,unsigned char byte) 
{ 
    unsigned long n; 
    WriteFile(h,&byte,1,&n,NULL); 
} 

而且 *字符查詢; query =(char)malloc(sizeof(char)10); 也沒有工作太

+0

您不需要爲getenv分配內存。 – user2553780

回答

0

好吧,你沒有添加你的其他功能旁邊的主,所以我不能把整個圖片。

基本上,由已經釋放的內存或已經釋放的內存產生的Segmantation錯誤,或者以錯誤的方式使用指針。

malloc的用法可能是這樣的: char s; s =(char)malloc(sizeof(char)* size);

你不需要做鑄造,但它不是問題。

+0

我添加了主題 –

+0

的所有功能嗯,檢查你的malloc那裏... char * s; s =(char *)malloc(sizeof(char)* qtyOfCharsDesired); – chrisb