Lua 定期在 NULL ptr 上免费请求

问题描述 投票:0回答:0

我有一个相当大的 lua 5.4 脚本在 C++ lua 嵌入器中运行(没有问题)。我还使用了自己的 l_alloc 实现。每当它被调用时,我都会打印 lua 请求的内容:

static void *l_alloc(void *ud, void *ptr, size_t osize, size_t nsize) {
    fprintf(stdout, "[LUA_ALLOC] ptr %p, osize %d, nsize %d\n", ptr, osize, nsize);

有时结果是:

[LUA_ALLOC] ptr 0x0, osize 0, nsize 0

引用lua 5.4文档:

当 nsize 为零时,分配器必须表现得像 free 并返回 空。

所以 Lua 要我打电话给 free(NULL) 只是为了好玩?我不明白为什么会这样。

我试图理解的问题:

  1. 对l_alloc使用的realloc使用不同的实现
  2. 检查空指针是否曾被 realloc 返回(当 nsize != 0 时)(因此被 alloc 返回)。不是这种情况。无论如何,这可能会导致段错误。
  3. 我试图找到导致此类请求的任何操作。我找不到任何东西。我的主要想法是,如果我创建一个空表、空字符串或其他东西,它可能会发生,但事实并非如此。

知道为什么会这样吗?

c++ lua malloc
© www.soinside.com 2019 - 2024. All rights reserved.