Я получаю ошибку сегментации с указателем, когда он объявлен как локальный.Программа слишком длинная, чтобы скопировать ее сюда, но она выглядит примерно так:
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");
}
put ("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 ()
На случай, если это может быть проблемой, это многопроцессорное приложение (fork, execv и т. Д ...)
Спасибо зазаранее за ваши ответы