當指針指向本地時,指針出現段錯誤。該程序太長以至於無法複製到此處,但它是這樣的:當指針爲本地時出現分段錯誤
void f(){
int* p;
int n = 0;
for (...) {
n++;
p = realloc(p, n * sizeof(int));
if (p == NULL) error();
}
//Code using the pointer
free(p);
}
int main() {
f();
puts("Finish");
}
puts(「Finish」);被執行,但在此之後我收到了分段錯誤。
如果我聲明p爲全局函數之前,它的功能完美無缺,這個問題得到解決,但我不知道爲什麼會發生這種情況。
運行調試程序我看不出問題出在哪裏,所有的值都沒問題。這是故障後的痕跡:
Program received signal SIGSEGV, Segmentation fault.
0x000000361206dbd1 in _IO_flush_all_lockp() from /lib64/libc.so.6
(gdb) bt
#0 0x000000361206dbd1 in _IO_flush_all_lockp() from /lib64/libc.so.6
#1 0x000000361206e725 in _IO_cleanup() from /lib64/libc.so.6
#2 0x00000036120334b2 in exit() from /lib64/libc.so.6
#3 0x000000361201d99b in __libc_start_main() from /lib64/libc.so.6
#4 0x0000000000400ce9 in _start()
以防萬一這可能是一個問題,it's的多進程應用程序(叉,execv,等...),提前爲你的答案
謝謝
謝謝,那就是問題所在。一個簡單的int * p = NULL修復了它。 – Evans 2011-12-22 01:38:50