gpt4 book ai didi

在自己的 malloc 函数中调用 printf 导致段错误

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

我想用 Linux GCC 在纯 C 中“覆盖”malloc,以进行内存检查。请注意,malloc() 是一个弱符号,在纯 C 中这样做是可以的。即,为 malloc() 创建一个强符号。

但我发现如果在我的 malloc() 实现中调用 printf() 它会崩溃,如果删除,它不会崩溃。

重现:

#include <stdio.h>

extern void *__libc_malloc(size_t size);

static int cnt = 0;

void* malloc(size_t size) {
printf("--- calling customized malloc\n");
cnt += 1;
if(cnt > 1) return NULL;

return __libc_malloc(size);
}

static void leak_test1() {
int* a = malloc(sizeof(int)*5);
a[0] = 3;
}

int main(){
leak_test1();
printf("cnt=%d\n", cnt);

return 0;
}

这是否意味着“调用 printf 在我自己的 malloc() 中无效”?深层原因是什么? (如果我错了请纠正我)

最佳答案

有可能 printf 调用 mallocstdout 分配缓冲区,所以你得到一个无限递归。

您可以通过调用 fprintf(stderr, ...) 来解决这个问题,因为 stderr 是无缓冲的。

关于在自己的 malloc 函数中调用 printf 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61790081/

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