2011-04-15 82 views
0

我收到posix_memalign异常。任何想法,为什么我们得到它?posix_memalign中断系统调用

在此先感谢。

+0

我得到输出到我的日志。 – kingsmasher1 2011-04-15 10:09:09

+0

@Mat:我已经重载了posix_memalign。这工作正常。但现在,我有一面旗帜。 '如果(标志){返回ob.registerPosix(memptr,alignment,size,LT_posix_memalign)}否则返回LT_POSIX_MEMALIGN(memptr,alignment,size)'这整个代码在'int posix_memalign()'函数内。 – kingsmasher1 2011-04-15 10:19:21

+0

registerPosix - 简单地记录泄漏。因此,是否设置了标志,我们检查泄漏,否则不会。 – kingsmasher1 2011-04-15 10:20:56

回答

0

问题已解决:事情是对齐边界应该是2的倍数和sizeof(void *)。所以如果posinter的大小是4字节,第二个参数应该是4,8,16等。而不是我把它只作为2的倍数,因此它崩溃了。

Wrong usage: crashes 
posix_memalign(&addr, 2, 8); 

Correct usage: 
posix_memalign(&addr, 4, 8); // Second argument multiple of void* and 2 
+0

看起来你的错误并没有检查'posix_memalign'的失败返回值。 – 2011-04-15 12:53:42

+0

是的,我没有检查errno。我更关心泄漏:( – kingsmasher1 2011-04-15 14:09:34

+0

检查'errno'与'posix_memalign'不正确。错误号码只是返回值。 – 2011-04-15 14:50:46

0

中断的系统调用通常是系统调用中断的结​​果。换句话说,该过程在呼叫正在执行时正在接收信号。