Terrence_Wayne 2017-11-13 08:04 采纳率: 0%
浏览 1259

如何解决运行Caffe的MNIST的实例出现的指针问题

我是ubuntu系统。下载好mnist数据后,在转换为LMDB时出现问题。

运行指令:sudo sh examples/mnist/create_mnist.sh

出现这样的问题:*** Error in `build/examples/mnist/convert_mnist_data.bin': munmap_chunk(): invalid pointer: 0x0000000000fc6240 ***

去检查./examples/mnist/目录下,本应生成train和test两个文件夹,此时只有train而没有test。

从网上搜索发现大家都没出现这样的问题,出现这个问题都是在自己编写程序时指针声明和释放出错,但是这里为什么会报错呢。对于这样的错误怎么解决呢?

完整的信息如下:
Creating lmdb...
I1113 15:57:00.470358 4735 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_train_lmdb
I1113 15:57:00.470620 4735 convert_mnist_data.cpp:88] A total of 60000 items.
I1113 15:57:00.470633 4735 convert_mnist_data.cpp:89] Rows: 28 Cols: 28
I1113 15:57:07.320497 4735 convert_mnist_data.cpp:108] Processed 60000 files.
*** Error in `build/examples/mnist/convert_mnist_data.bin': munmap_chunk(): invalid pointer: 0x0000000000fc6240 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f06569327e5]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x1a8)[0x7f065693f698]
/usr/lib/x86_64-linux-gnu/libprotobuf.so.9(_ZN6google8protobuf8internal28DestroyDefaultRepeatedFieldsEv+0x1f)[0x7f066094d8af]
/usr/lib/x86_64-linux-gnu/libprotobuf.so.9(_ZN6google8protobuf23ShutdownProtobufLibraryEv+0x8b)[0x7f066094cb3b]
/usr/lib/x86_64-linux-gnu/libmirprotobuf.so.3(+0x233b9)[0x7f062efc23b9]
/lib64/ld-linux-x86-64.so.2(+0x10de7)[0x7f0667226de7]
/lib/x86_64-linux-gnu/libc.so.6(+0x39ff8)[0x7f06568f4ff8]
/lib/x86_64-linux-gnu/libc.so.6(+0x3a045)[0x7f06568f5045]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf7)[0x7f06568db837]
build/examples/mnist/convert_mnist_data.bin[0x4025b9]

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 04:02
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于在转换数据到lmdb格式的过程中,出现了内存泄漏的问题。这可能是因为在munmap()函数中,释放了不正确的内存地址。

    解决方案是检查munmap()函数中的内存释放是否正确,以及是否有其他可能导致内存泄露的地方。如果确实存在内存泄漏,请尝试使用gdb等调试工具来定位并修复它。

    以下是一个简单的例子,展示了如何使用munmap()函数来释放内存:

    void release_memory(void *ptr, size_t length) {
        if (munmap(ptr, length) != EOK) {
            perror("munmap failed");
            exit(1);
        }
    }
    

    在这个例子中,我们定义了一个release_memory()函数,用于释放内存。在munmap()函数中,我们需要确保返回值等于EOK,否则可能会抛出一个错误。如果没有成功释放内存,则应该打印出错误信息,并退出程序。

    请注意,这个示例并不适用于你的具体场景,因为你的问题是关于Caffe MNIST数据转换过程中的内存泄漏。如果你能提供更多的上下文或代码片段,我将能够更好地帮助你解决问题。

    评论

报告相同问题?