2011-04-04 41 views
0

我在AIX 6.1中调试了一些C代码中的动态内存分配问题,并且在我的堆栈跟踪中我在崩溃之前得到了命令memmove_overlay。AIX中的memmove_overlay命令是什么?

在程序崩溃之前,我调用了memcpy函数。

这个命令在做什么?

+0

请显示一些代码。但是,我认为瑞恩是正确的。 – JeremyP 2011-04-04 14:15:42

+0

很难从你提供的稀缺信息中找出所有的东西,但是按名称猜测,你可能调用了'memcpy'作为重叠的内存区域。为重叠的内存区域调用memcpy是非法的。其余的如下。 – AnT 2011-04-04 15:46:34

回答

1

memcpy将存储区域从* src复制到* dest。如果内存区域重叠,它可能会导致程序崩溃。改为尝试memmove

1

验证您的memmove()调用的参数。内部探测memmove_overlay()函数是memmove()实现的一部分,所以它可能与memmove()正在做同样的事情。

你当然可以建立一个虚拟的测试案例使用已知的安全组参数,就像这样:

char test1[2], test2[2] = { 47, 11 }; 

memmove(test2, test1, sizeof test2); 

然后使用调试器步入memmove(),看看它是如何在memmove_overlay()结束。

但是,碰撞的可能性仅仅是因为对memmove()的错误输入,因此与memmove_overlay()函数正在运行的事实无关。