gpt4 book ai didi

c - 简单的 c 函数,无段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:34:27 25 4
gpt4 key购买 nike

我知道这个问题已经被问了很多,但我看过的每个例子似乎都不完全合适。在下面的代码中,如果我保留 free(),生成的编译二进制段错误。如果我删除它,代码就可以正常工作。我的问题是,为什么?

int convertTimeToStr(time_t* seconds, char* str)
{
int rc = 0;

if (str == NULL) {
printf("The passed in char array was null!\n");
rc = 1;
} else {
char* buf = malloc(sizeof(char) * 100);
memset(buf, '\0', sizeof(buf));

buf = asctime(gmtime(seconds));
strcpy(str, buf);

free(buf);
}

return rc;
}

最佳答案

问题是您重新分配 指向已分配内存的指针。你所做的基本上等同于

int a = 5;
int b = 10;
a = b;

然后想知道为什么 a 不再等于 5

使用赋值 buf = asctime(gmtime(seconds)) 会丢失原始指针并发生内存泄漏。

什么 asctime函数返回的是一个指向静态内部缓冲区的指针,它不是您应该传递给 free 的东西。

关于c - 简单的 c 函数,无段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594064/

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