在变量赋值之前,内存不包含垃圾

在变量赋值之前,内存不包含垃圾,第1张

概述我有一个简单的C程序: #include <stdio.h>int main(){ int i; for(i = 0; i < 10; i++) printf("Hello\n"); return 0;} 我用gcc编译它: gcc -g test.c 然后我运行调试器: gdb -q ./a.out 我在main设置了一个断点并运行: (gdb) 我有一个简单的C程序:

#include <stdio.h>int main(){    int i;    for(i = 0; i < 10; i++)        printf("Hello\n");    return 0;}

我用gcc编译它:

gcc -g test.c

然后我运行调试器:

gdb -q ./a.out

我在main设置了一个断点并运行:

(gdb) break main(gdb) run

然后我让它运行,直到它到达断点并尝试在地址rip当前指向显示汇编指令:

(gdb) x/i $rip=> 0x400538 <main+8>:   mov    DWORD PTR [rbp-0x4],0x0

看起来下一条指令将用值0初始化我的局部变量i.由于它还没有执行指令,我希望有一个垃圾值.

(gdb) x/4xb $rbp-40x7fffffffe0ec: 0x00    0x00    0x00    0x00

它看起来不像垃圾值,看起来一切都已经零了.在执行main中的任何代码之前,断点应该暂停程序.

我在这里错过了什么?在初始化局部变量i之前,该内存位置是否应包含随机垃圾值?

解决方法

It doesn’t look like garbage values,it looks like everything has already been zero’d out.

我修改了你的例子,以表明它只是一个巧合.

#include <stdio.h>int main(){  int i1;  int i2;  int i3;  int i4;  int i5;  int i6;  int i;  for(i = 0; i < 10; i++)    printf("Hello\n");  return 0;}
(gdb) startTemporary breakpoint 1 at 0x4005ac: file main.cpp,line 13.Starting program: /home/a.outTemporary breakpoint 1,main () at main.cpp:1313        for(i = 0; i < 10; i++)(gdb) info localsi1 = 0i3 = 0i5 = 32767i = 0i2 = 4195520i4 = -7856i6 = 0

你看,不同的价值是可能的.

至于您的示例,此地址的值在到达main()之前至少更改两次.只需设置监视此地址,您将看到它在main()之前调用的函数中已更改:

(gdb) watch *(int*)0x7fffffffe06cHarDWare watchpoint 1: *(int*)0x7fffffffe06c(gdb) rStarting program: /home/a.outHarDWare watchpoint 1: *(int*)0x7fffffffe06cold value = 0New value = 580x0000003a1d890880 in handle_intel () from /lib64/libc.so.6HarDWare watchpoint 1: *(int*)0x7fffffffe06cold value = 58New value = 00x0000003a1d0146fd in _dl_runtime_resolve () from /lib64/ld-linux-x86-64.so.2HarDWare watchpoint 1: *(int*)0x7fffffffe06cold value = 0New value = 10x00000000004005c3 in main () at main.cpp:77         for(i = 0; i < 10; i++)#0  0x00000000004005c3 in main () at main.cpp:7
总结

以上是内存溢出为你收集整理的在变量赋值之前,内存不包含垃圾全部内容,希望文章能够帮你解决在变量赋值之前,内存不包含垃圾所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存