gpt4 book ai didi

c - malloc、memset 和 free 的正确用法

转载 作者:行者123 更新时间:2023-11-30 18:25:37 25 4
gpt4 key购买 nike

我在使用 malloc、memset 和 free 时遇到问题,它们无法按预期工作。问题出在最新的 printf 函数上,它不是打印“test”,而是打印一些奇怪的字符然后测试,比如“@#°test”。你能解释一下为什么吗?我注意到,如果我在第二个 malloc 之后执行 memset,一切都会正常工作。另外,我真的不明白为什么如果我不调用函数“function()”,即使没有内存集,一切都会正常

这是我的代码:

#define size 10
void function(){
...
...other code...
...
char *b=malloc(size);
read(file_ds,b,size); //file_ds stands for file descriptor, correctly opened with open function.
memset(b,0,size);
free(b);
}

void main(){
...
...other code...
...
function(); //If I don't call this, everything works fine, even without a memset
char *c=malloc(size);
strcat(c,"test");
printf("%s",c);
}

最佳答案

strcat 期望您给它的地址指向一个有效的字符串,并且它将尝试通过查找零字节来找到该字符串的结尾。但是,您的指针指向未初始化的内存,并且尝试读取它是未定义的行为。

malloc 更改为 calloc 可为您提供初始化的内存。然而,这可能有点过头了,因为有一个初始化的初始段就足够了,你可以像这样实现L

char *c = malloc(size);
c[0] = '\0';

strcat(c, "test"); // OK

关于c - malloc、memset 和 free 的正确用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26568378/

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