2013-07-22 82 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