二维数组与二级指针

本文通过一个实际的编程案例,探讨了C语言中二维数组与二级指针的区别。在分析编译器警告和运行时段错误的过程中,揭示了数组和指针在内存分配上的不同处理方式,以及如何使用GDB和objdump进行调试。通过内存分配图,解释了在尝试访问非法地址时导致的异常行为。
摘要由CSDN通过智能技术生成

室友编写了关于一个二级指针与二维字符串数组的程序,但是老是报段错误,不明就里,让我帮忙调试。我根据他的程序出理的问题,写了另外一个简单一点的程序,来了解问题所在,程序如下:


运行gcc  -W  b.c -o  b,会产生警告信息:


运行: ./b,果断报段错误了。

之所以会报警告错误,原因在于c语言的多维数组实际上是数组的数组,a与b的类型并不匹配,a是一个具有两个元素的数组,数组的元素是具有两个char元素的数组;而b是一个二级指针,它只是一个指向一维数组的指针,数组的元素都为char*。但是b是一个指针,它需要一个地址来赋值,而a刚好能提供一个地址值,因此编译器只是提出了警告而没有报错。

在运行程序报了段错误后,果断地用gdb进行调试,结果出现了令人费解的问题:

gcc  -W  b.c -o  b

gdb  ./b

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值