c语言函数调用时 Cannot access memory at address 0xbf786d68

PandaGreatly 2013-05-01 12:32:07
代码很长,先描述一下问题吧。

宏定义为:
#define ROW 256
#define COL 512
这种比较小的数时,函数bp_decode()正常

而宏定义改成
#define ROW 512
#define COL 1024
发生段错误,我简单调试了一下,是越界访问,错误描述如下:


(gdb) r
Starting program: /home/jerry/code/a.out
breakloop=1
产生H矩阵用时10000
SNR_ads:0x804d088

Program received signal SIGSEGV, Segmentation fault.
0x0804a430 in

bp_decode (
rx_waveform=0xbffe6318,
SNR=<error reading variable: Cannot access memory at address 0xbf786d68>,
amp=1,
H=0x804d0a0<H>,
rearranged_cols=0x808fe40 <rearranged_cols>,
output=0xbffe44be)

at test.cpp:610


为什么取SNR变量值的时候会访问 0xbf786d68 ?SNR的地址应该是 0x804d088 才对!


下面贴个完整代码:
http://my.oschina.net/zangzy/blog/126743

...全文
6525 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
PandaGreatly 2013-05-02
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。 堆栈大小默认1MB 可以在链接选项中改大。
非常感谢!
zhaokai115 2013-05-02
  • 打赏
  • 举报
回复
应该是堆栈溢出,611行加static关键字试试,如下
//struct original_bp newh[ROW][COL]={0}; 
static struct original_bp newh[ROW][COL]={0};
赵4老师 2013-05-02
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。 堆栈大小默认1MB 可以在链接选项中改大。
PandaGreatly 2013-05-02
  • 打赏
  • 举报
回复
引用 1 楼 zhaokai115 的回复:
应该是堆栈溢出,611行加static关键字试试,如下
//struct original_bp newh[ROW][COL]={0}; 
static struct original_bp newh[ROW][COL]={0};
非常感谢,按你说的办法已经解决。 局部变量是放在栈空间中的,而函数传递的参数也在栈空间中,struct original_bp newh[ROW][COL]={0};这个数组太大,把栈空间其它的数据给覆盖了。所以声明成static在.data段中存放就可以。 不知道我这样的理解是否正确。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧