gpt4 book ai didi

c - 段错误无效内存 0x0

转载 作者:太空狗 更新时间:2023-10-29 12:01:40 25 4
gpt4 key购买 nike

我的结构变量指针有问题。我刚开始使用 GDB 来调试问题。由于段错误,应用程序在遇到下面的代码行时停止。 ptr_var 是一个指向结构的指针

ptr_var->page = 0;

我发现在将值“0”分配给结构成员“page”时导致段错误的一系列函数调用后,ptr_var 被设置为无效内存 0x0。该系列函数调用没有对 ptr_var 的引用。以前分配给 ptr_var 的旧地址仍在内存中。我仍然可以使用旧地址打印 struct ptr_var 中成员的值。下面的 GDB session 显示我正在使用其地址打印结构 ptr_var 的字符串成员

(gdb) x /s *0x7e11c0
0x7e0810: "Sample String"

我不知道什么时候变量 ptr_var 被分配了一个无效地址 0x0。我是 GDB 的新手和普通的 C 程序员。非常感谢您在此问题上的协助。谢谢。

最佳答案

您想要做的是设置一个观察点,然后 GDB 将在每次修改结构成员时停止执行。

用下面的示例代码

typedef struct {
int val;
} Foo;

int main(void) {
Foo foo;
foo.val = 5;
foo.val = 10;
}

在创建结构时放置断点并执行 watch -l foo.val 然后每次更改该成员时,您都会中断。以下是我的 GDB session ,带有我的输入

(gdb) break test.c:8
Breakpoint 3 at 0x4006f9: file test.c, line 8.
(gdb) run
Starting program: /usr/home/sean/a.out

Breakpoint 3, main () at test.c:9
9 foo.val = 5;
(gdb) watch -l foo.val
Hardware watchpoint 4: -location foo.val
(gdb) cont
Continuing.
Hardware watchpoint 4: -location foo.val

Old value = 0
New value = 5
main () at test.c:10
(gdb) cont
Continuing.
Hardware watchpoint 4: -location foo.val

Old value = 5
New value = 10
main () at test.c:11
(gdb) cont

关于c - 段错误无效内存 0x0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33275114/

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