0
以下是我從pipe函數中讀取的代碼片段。這會正確執行並驗證數據是否進入緩衝區。GCC 4.7.0運行時間問題 - 接收信號11(SigSegv)
int readFrom(char *buffer)
{
int nread;
if((nread = read(readfd,buffer,100)) < 0)
{
printf("\nerror in reading data from FIFO\n");
return(-1);
}
buffer[nread]='\0';
return(0);
}
在上面的例子中,nread小於100。我正在使用GCC-4.7.0。
我們有用於上述功能類似下面的抽象層:
int pipe_input(char *parmPtr, int size)
{
char readMsg[100];
if(readFrom((char *)&readMsg) == -1)
return ERROR;
if (strlen(readMsg) < 1)
{
printf("Incorrect Input\n");
return ERROR;
}
strncpy(parmPtr, readMsg, ((size < 100)?size:100));
return 0;
}
在上面的函數,以及可以確認讀取的消息是正確的,並parmptr被正確地裝載用值。但在函數中,我試圖調用pipe_input我得到一個sigsegv。這發生在GCC-4.7.0中,但是使用GCC-4.2.4編譯的相同代碼執行得很好。我覈實了警告,但沒有警告以上。任何指針都會非常有幫助。
下面的代碼片段調用pipe_input:
int Calling_func(void)
{
char alpha[100] ;
pipe_input(alpha,100);
printf("alpha value is %s \r\n",alpha);
}
在print語句獲取SIGSEGV。
什麼是'密碼'?這是一個錯字還是'alpha'沒有初始化?將未初始化的char數組傳遞給printf是有問題的。 –
這是一個錯字;它需要是阿爾法。 – lxusr
顯示「Calling_func()」的代碼段確實不會實際調用您的'pipe_input()'函數(也不會調用''readFrom()')。 –