我試圖將我的C GNU/Linux代碼移植到FreeBSD上。起初,我認爲它不會編譯和行爲異常,但它並沒有採取行動,因爲它沒有使用其他操作系統本身不具備的功能。儘管它編譯得很好(沒有錯誤或者使用-Wall
的警告),但應用程序會在GNU/Linux安裝上按照預期正常工作的線路上保持seg錯誤。將結構指針傳遞給函數segfault C FREEBSD
我正在做的是創建一個指向結構的指針,然後將指針作爲void指針傳遞給函數,然後在函數內重新創建它。
例如:
typedef struct
{
int i;
}some_struct;
int main()
{
some_struct *test = malloc(sizeof(some_struct));
test->i = -1;
function(test);
return 0;
}
void *function(void *prarm)
{
some_struct test = *((some_struct *)param); //segfaults on this line.
free(param);
return NULL;
}
在我的GNU/Linux的安裝,這將讓我在本地重新創建函數內部與傳遞指針數據的結構,並讓我從main()
但在FreeBSD釋放malloc
版內存它seg錯誤,我不知道爲什麼。
如果我在function
在gdb
突破並鍵入
p *(some_struct *)param
它成功地打印出是從指針,從函數內部它所有的變量創建我的命令結構。
爲什麼在我的FreeBSD測試機器上運行GNU/Linux和seg錯誤,我正在迷失方向。
感謝您對我遇到的這個問題的任何幫助。
發佈GCC(或CLang?)標誌也會有幫助。 – 9000
這不是真正的代碼。問題在於你省略的其他部分。 – cnicutar
這段代碼甚至沒有編譯,事實上,你引用的'gdb' print cmd在你的代碼中使用了一個完全不同的結構名稱。請張貼展示問題的*真實*代碼。 – WhozCraig