的代码是从C代码写在下面解释这个和平的代码的含义: -任何人都可以从C
int main(){
char* time = (char *)malloc(10240 * sizeof(char));
scanf("%s",time);
return 0;
}
的代码是从C代码写在下面解释这个和平的代码的含义: -任何人都可以从C
int main(){
char* time = (char *)malloc(10240 * sizeof(char));
scanf("%s",time);
return 0;
}
错误:
因为在范围内没有原型malloc
的编译器将结果(类型void*
)解释为类型int
。
然后它将该值转换为char*
并将生成的(无意义的)值分配给time
。
然后,仍然使用无意义的值,它试图存储一个读取值并将其解释为来自标准输入的整数。
然后它退出而不做任何事情。特别是它不使用读取或释放内存(可能)更早分配的值。
它首先使用malloc函数从堆中动态保留内存,然后它正在扫描一个字符串。请注意格式fo%s的转换说明符:与它有关的参数是一个指针(不是例如time [0])。
不要忘记在完成工作后内存应该是空闲的
syntax: free (time);
char* time = (char *)malloc(10240 * sizeof(char));
在这里,你使用malloc()
分配的内存块10240 * sizeof(char)
你。 sizeof(char)
等于4个字节,所以你分配的内存10240 * 4 = 40960
块作为int
默认情况下,你有没有指定的范围内(视为void*
)任何原型malloc()
然后你施放的内存空间为char *
和有*time
指向分配给你的内存中的第一个块。
scanf("%s",time);
在这一行,你尝试存储在time
从scanf()
解读为整数输入一个值。你的格式说明符在这里是错误的。
然后程序终止,但没有释放你分配给它的内存,也没有对你用scanf()
进行的任何操作做任何事情。
我们不是“解释我在互联网上找到的一些代码,或者是由不愿意解释的朋友给出的网站”。 – Olaf
这段代码有很多问题 - “sizeof(char)”是多余的,不应该强制转换malloc的结果,永远不会释放内存,不会检查scanf中的返回代码,代码容易受到缓冲区溢出的影响,你缺少包含stdio.h和stdlib.h。代码没有任何意义 - 它读取输入然后退出。 –