我是C的新手,所以请随时纠正错误.
我有一些代码有点像这样:
// some variables declared here like int array_size
char* cmd = (char*)malloc(array_size*sizeof(char));
for(;;){
// code here sets cmd to some string
free(cmd);
array_size = 10;
cmd = (char*)malloc(array_size*sizeof(char));
// print 1
printf(cmd);
printf("%d\n", strlen(cmd));
// repeat above for some time and then break
}
Run Code Online (Sandbox Code Playgroud)
所以我做了一段时间的循环,看看它打印的是什么.我期望的是每次字符串为空并且长度为0.但是,情况并非如此.显然有时候malloc会获得带有垃圾的内存并打印出来并且带有垃圾的内存有一个长度!= 0.所以我想通过在malloc返回时将新的char字符串中的所有char设置为'\ 0'来解决这个问题.但是,我很确定我做错了什么.为什么即使在我释放字符串并执行一个全新的malloc后,我的字符串与垃圾邮件不同,第一个malloc?我究竟做错了什么?
malloc只是分配了内存,仅此而已.它对记忆中的内容没有任何承诺.具体来说,它不会初始化内存.如果您希望将已分配的内存清零,您可以手动执行memset或只是调用calloc(这实际上是malloc将内存清零).