gpt4 book ai didi

c - malloc 返回 0x100000000

转载 作者:行者123 更新时间:2023-12-04 11:16:24 27 4
gpt4 key购买 nike

我对 malloc 有一个奇怪的问题。使用多个 malloc 分配 <10mb 后,malloc 突然返回地址 0x100000000 ,这会在访问时导致 SIGSEGV。我不知道出了什么问题。 errno 设置为 0 并且我在 ram 中有足够的空间,所以它不应该是空间问题。 malloc 返回的最后一个地址小于 0x6255f0 。知道要寻找什么吗?

关于我的系统的一些信息:

  • gcc 版本 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
  • 标志:-Wall
  • uname: 2.6.35-27-generic#48-Ubuntu SMP Tue Feb 22 20:25:46 UTC 2011 x86_64 GNU/Linux

  • PMAP 输出:
    Address           Kbytes     RSS   Dirty Mode   Mapping
    0000000000400000 0 32 0 r-x-- tests
    000000000060a000 0 4 4 r---- tests
    000000000060b000 0 4 4 rw--- tests
    000000000060c000 0 116 116 rw--- [ anon ]
    00007ffff75cd000 0 348 0 r-x-- libc-2.12.1.so
    00007ffff7747000 0 0 0 ----- libc-2.12.1.so
    00007ffff7946000 0 16 16 r---- libc-2.12.1.so
    00007ffff794a000 0 4 4 rw--- libc-2.12.1.so
    00007ffff794b000 0 12 12 rw--- [ anon ]
    00007ffff7950000 0 32 0 r-x-- libm-2.12.1.so
    00007ffff79d2000 0 0 0 ----- libm-2.12.1.so
    00007ffff7bd1000 0 4 4 r---- libm-2.12.1.so
    00007ffff7bd2000 0 4 4 rw--- libm-2.12.1.so
    00007ffff7bd3000 0 28 0 r-x-- liblinopt.so
    00007ffff7bdb000 0 0 0 ----- liblinopt.so
    00007ffff7dda000 0 4 4 r---- liblinopt.so
    00007ffff7ddb000 0 4 4 rw--- liblinopt.so
    00007ffff7ddc000 0 108 4 r-x-- ld-2.12.1.so
    00007ffff7f6c000 0 432 432 rw--- [ anon ]
    00007ffff7ff8000 0 12 12 rw--- [ anon ]
    00007ffff7ffb000 0 4 0 r-x-- [ anon ]
    00007ffff7ffc000 0 4 4 r---- ld-2.12.1.so
    00007ffff7ffd000 0 4 4 rw--- ld-2.12.1.so
    00007ffff7ffe000 0 4 4 rw--- [ anon ]
    00007ffffffde000 0 16 16 rw--- [ stack ]
    ffffffffff600000 0 0 0 r-x-- [ anon ]
    ---------------- ------ ------ ------
    total kB 9160 1196 648

    Program received signal SIGSEGV, Segmentation fault.
    0x00007ffff7bd8e67 in bound_knapsack (sizes=0x610b30, profits=0x610ad0, B=103,
    limit=2) at /home/x/Development/binpacking/src/lib/knapsack.c:123

    更新

    运行 valgrind 揭示了问题:它是之前几行的 calloc: calloc( n, sizeof(unsigned int));应该是: calloc( n, sizeof(unsigned int*));这导致分配的块太小,用于存储 malloc 的结果。


    谢谢你的橡皮鸭!

    最佳答案

    尝试将以下行添加到您的程序中:

    #define MALLOC_CHECK_ 3

    这应该会导致使用不同版本的 malloc,该版本可以检测某些错误并将其报告给您。有关更多详细信息,请参阅 malloc man page 的“注释”部分。

    关于c - malloc 返回 0x100000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5357731/

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