ローカルとして宣言されたときにポインタでセグメンテーションフォルトが発生します。プログラムは長すぎてここにコピーできませんが、次のようなものです:ポインタがローカルの場合のセグメンテーションフォールト
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");私はこの後にセグメンテーションフォルトを取得します。
funcionの前にpをグローバルとして宣言すると、フォルトなしで完全に動作し、この問題は解決しますが、なぜこのようなことが起こっているのかわかりません。
デバッガの実行問題がどこにあるか分かりません。すべての値がわかりました。 (...フォーク、EXECV、など)あなたの答えを事前に
おかげで、それは問題になる可能性が念のために
が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マルチアプリケーション:これは、故障した後のトレースであります
ありがとう、それは問題でした。単純なint * p = NULLはそれを修正しました。 – Evans