-
20161011 gdb工具(分析原理和结果) gcc 的调试工具 gdb(gdb -help) gcc -g main.c -main.out (调试模式) 调试命令: gdb main.out l(list 显示源代码,l 或者 enter 继续执行l 继续显示) 1 break 12(行号) 打断点 2 start 单步调试 3 n(next 下一行) 4 p a (print 打印变量a) 5 s (step 进入方法,n执行下一行) 6 bt 查看函数堆栈 7 f 切换函数堆栈(f 1 切换到1) 8 q 退出调试 9 p *a(int *a 时 p a 打印出的是a的内存地址,p *a打印的是这个地址里对应的值.P &a 显示a的内存地址空间 P &functionname p + &函数名,显示函数程序在代码段的内存地址)查看全部
-
1.void change(int *a,int *b) 其中*a为指针参数,*+任意参数或者变量均为指针参数或者变量 在调用该函数时需要在参数前+& 即: change(&a,&b);查看全部
-
char str1[] = "Hello"; char str3[5]; str1 = "HelloWorld"; 很有意思 : (1)当 str1 声明时,长度为 5 ,str3 也是数组类型,与str1都在同一个内存空间中,并且在 str1 之后声明 , 他们的地址应该是连续的; (2)当改变 str1 的值为 “HelloWorld”时,str1之前的大小装不下这么多字符,就会使用后面的内存地址,str3 本是空的并没有赋值,但是由于 str1的内存溢出,装到了str3中,所以str3也是有值的; (3)总之,数组内存溢出是件危险的事;查看全部
-
C 语言的 \0 代表结束查看全部
-
数组和指针有一定的通用性: 但又有一定的差别, 数组声明后,地址就不再改变,数组名称相当于指针常量; int *p = array; 而 p 是变量指针,可以改变;查看全部
-
跟据 c 语言语法: int *p = &a; // 取得地址值; p[3] 相当于 p+=3 , 表示内存地址向后移动三格;查看全部
-
为什么从 14 加到 18 , 而不是 15、16、17 .... 是因为 int 类型变量是占 4 个字节的, 所以在当使用 p++ 时,变量所在的地址值实际上加了4.查看全部
-
在一个变量前面如果不加 * 号,会返回变量指向的地址; 在变量前面加 * 号, 在数据段(堆栈): 会根据地址找到对应的值, 在代码段: 会根据地址找到对应的函数.查看全部
-
32 位内存地址指针占 4 个字节,64位操作系统内存地址指针占用8个字节; 内存地址的大小决定了所在范围。查看全部
-
计算机内存由操作系统来统一管理;查看全部
-
32位操作系统只能有 4g 内存的原因,地址总线;查看全部
-
bt 命令进入函数栈 , f num 命令进行切换; 如果不用指针 , 默认情况下进行值传递 , 程序执行过程中只改变当前作用域的变量值; 编译时使用: cc -g file.c -o file -g 表示添加调试信息;查看全部
-
1.通过 gdb ./name.out 进入调试模式; 2.通过 l 命令查看源代码; 3.通过 break line-num 设置断点; 4.通过 start 开始单步调试,默认断点为line-1; 5.通过 s 进入函数体 ,q 退出调试; 6.通过 p 打印函数值 , n 进行下一步;查看全部
-
指针使用语法查看全部
-
栈的特点:先进后出查看全部
举报
0/150
提交
取消