SIGSEGV memcopy或memmove

时间:2011-06-07 01:57:15

标签: android c

我正在使用NDK开发Android应用程序。应用程序出现“SIGSEGV”错误,我认为这是一个分段错误错误。

我查看了我的代码,我认为memcopy和memmove可能会导致此错误。我想知道是否有一种安全的方式来调用这些功能。

另外请告诉我任何描述得很好的NDK调试教程或任何相关内容。提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用那些2的规则是当你将一个字节块从一个地方复制到另一个地方时使用memcpy,并且源和目标不重叠。如果它们重叠,则必须使用memmove。但是,错误地使用它们会导致数据损坏,而不是段错误。当您尝试读取或写入无效的内存位置时会发生段错误 - 类似于Java的NullPointerException。您想要以正确的顺序三重检查您是否有目的地,来源和大小。除此之外,我们还需要看一些代码。

答案 1 :(得分:0)

您可以在NDK代码中使用Android的“logcat”日志记录工具,因此如果您需要了解哪些方面有问题,那可能非常有用(除非您能够运行gdb / gdbserver)。

memcpy或memmov很可能会导致SIGSEGV。您需要确保所有指针都正确,缓冲区大小也是正确的。如果你在那里犯了错误,最好的情况是你的SIGSEGV和程序崩溃。更糟糕的是,您可能会覆盖应用程序中的其他内存,直到一段时间后才知道(很难找到损坏的原因)。