gpt4 book ai didi

c++ - mmap 损坏,malloc 是否覆盖内存上的元素

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:37 24 4
gpt4 key购买 nike

我在数据文件中遇到了随机问题,这些数据文件是使用 mmap 进行只读访问的(它们很大),并且我一直在尝试找到错误的来源,我注意到文件最终会被当时正在执行的随机数据损坏(从控制台提取,由其他程序执行的一些日志等)。今天,我的程序再次崩溃,但这次我注意到损坏的文件仅以只读方式打开,这没有意义。如果使用以下命令打开文件,文件会如何损坏:

FILE _pFile = ::open(fileName, O_RDONLY);
char* _addr = reinterpret_cast<char *>(mmap(NULL, fileLenRequired, PROT_READ, MAP_FILE | (shared?MAP_SHARED:MAP_PRIVATE) | MAP_POPULATE , _pFile, offset));

阅读其他一些问题让我认为 mmap 不受“保护”,它可能会被 malloc 调用覆盖/重叠,我该如何防止这种情况?

顺便说一句,我认为这是由内存泄漏或错误的指针引起的,因此我使用 valgrind 进行了全面检查并修复了几个问题,但文件时不时地会损坏。

最佳答案

好吧,最后我发现了问题所在,问题不在于映射文件,最初我以为系统崩溃是因为文件不知何故损坏了,我发现崩溃首先发生,然后任何打开的文件都被垃圾损坏。问题是它真的很难重现,而且只发生在生产服务器中,我绞尽脑汁想找出问题所在。

感谢大家花时间阅读并尝试提出选项,至少这有助于检查我的代码中是否没有做一些明显错误的事情。

关于c++ - mmap 损坏,malloc 是否覆盖内存上的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33556371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com