我不明白爲什麼下面的僞代碼導致段錯誤。在pthread中初始化時發生段錯誤
使用pthreads來運行一個函數我運行到一個SEGFAULT初始化一個整數爲零。
當my_threaded_function
不在線程上下文或者如果我從主線程調用函數沒有問題。
僅在maze_init
函數內初始化rc=0;
bu時纔會出現SEGFAULT。
我已確認我沒有堆棧空間。但我想不出是什麼導致函數在pthread內部行爲不同(不涉及共享內存),根據gdb無法訪問地址&aa
。
爲什麼堆棧變量的地址不在堆棧上?
int maze_init(Maze*m, char* filename)
{
FILE *fp;
int aa, bb, rc;
aa = 0; /// SEGFAULT HERE
...
return 1;
}
void* my_threaded_function(void* arg)
{
Maze maze;
int rc;
rc = 0;
rc = maze_init(&maze,"test.txt");
return rc;
pthread_exit((void*)1);
}
int main(int argc,char** argv){
pthread_t t;
pthread_create(&t, NULL, my_threaded_function,(void*)0);
sleep(10);
}
- 編輯(固定碼錯字到
return rc
)
在你的'thread'函數中,即'my_threaded_function',你爲什麼要返回'return rn;'和'rn'聲明在哪裏? – Ganesh
「迷宮」有多大? –
你是否遞歸調用'maze_init'? 「迷宮」的定義是什麼? –