我正在尝试分配两块内存并写入其中一块(NASM,我今天更新的Arch上的Linux 86_64,glibc):
global main
extern malloc
section .text
main:
mov rdi, 5
call malloc
mov qword [array], rax
mov qword [rax+24], 5 ; mov qword [rax+8], 5 or mov qword [rax+10000] doesn't die on me
mov rdi, 5
call malloc
section .bss
array resq 1
当我这样做时:
nasm -felf64 test.s; gcc test.o; ./a.out
我明白了:
test.out: malloc.c:2395: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Keskeytetty (luotiin core-tiedosto)
(最后一行大致翻译成英文(创建了一个核心文件),即核心转储)
谷歌搜索和搜索SO告诉我,我可能正在写一些malloc设置为自己的内部使用。实际测试似乎证实了这一点(只有在我确实尝试编写时才会出现错误。)。然而,我无法找到我应该采取的措施来防止这种情况发生。有更多洞察力的人能告诉我应该做些什么吗?
提前谢谢。
答案 0 :(得分:1)
好的,正如Michael Petch所说,malloc似乎将其大小视为字节。所以这会奏效:
conf="runtime->*"