gpt4 book ai didi

c - 指针为本地时出现段错误

转载 作者:行者123 更新时间:2023-12-01 16:54:35 25 4
gpt4 key购买 nike

当指针声明为本地指针时,我遇到了段错误。该程序太长,无法复制到这里,但它是这样的:

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("完成");已执行,但此后出现段错误。

如果我在函数之前将 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 等...)

提前感谢您的回答

最佳答案

看起来你不必费心去初始化p——使用全局变量它将被隐式初始化为0,但局部变量则不会。因此,您最终会使用随机垃圾指针调用 realloc/free ,这会破坏堆并导致稍后崩溃......

初始化p,这应该可以修复它。

关于c - 指针为本地时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8598443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com