首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SIGSEGV memcopy或memmove

SIGSEGV memcopy或memmove
EN

Stack Overflow用户
提问于 2011-06-07 09:57:15
回答 2查看 1.3K关注 0票数 0

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

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

另外,请让我知道任何描述良好的NDK调试教程或任何相关的东西。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-07 10:05:43

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

票数 1
EN

Stack Overflow用户

发布于 2011-06-07 10:04:58

您可以在NDK代码中使用Android的"logcat“日志记录工具,因此如果您需要了解哪里出了问题,这将非常有帮助(除非您能够运行gdb / gdbserver)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6259913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档