tes*_*ter -1 c malloc free memset
我使用malloc,memset和free时遇到问题,这不能按预期工作.问题在于最新的printf功能,而不是打印"test",它打印一些奇怪的字符,然后进行测试,比如"@#°test".你能解释我为什么吗?我注意到如果我在第二个malloc之后做了一个memset,一切正常.另外,即使没有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);
}
Run Code Online (Sandbox Code Playgroud)
strcat期望您给它的地址指向一个有效的字符串,并且它将尝试通过查找零字节来查找该字符串的结尾.但是,您的指针指向未初始化的内存,尝试读取它是未定义的行为.
更改malloc到calloc为您提供初始化的内存.然而,这可能是过度的,因为它足以拥有一个初始化的初始段,你可以像thisL一样实现
char *c = malloc(size);
c[0] = '\0';
strcat(c, "test"); // OK
Run Code Online (Sandbox Code Playgroud)