代码来自C,代码如下: -
int main(){
char* time = (char *)malloc(10240 * sizeof(char));
scanf("%s",time);
return 0;
}
答案 0 :(得分:1)
错误:
因为malloc
的范围没有原型,编译器会将结果(类型void*
)解释为类型int
。
然后,它会将该值转换为char*
类型,并将结果(无意义)值分配给time
。
然后,仍然使用无意义的值,它会尝试在那里存储一个读取值并从标准输入解释为整数。
然后退出而不再做任何事情。特别是它不会使用读取的值或释放先前分配的内存。
答案 1 :(得分:0)
它首先使用malloc函数从堆中动态保留内存,然后扫描字符串。注意fo%s转换说明符的格式:与之相关的参数是指针。(例如时间[0]。)
不要忘记工作完成后内存应该是免费的
syntax: free (time);
答案 2 :(得分:0)
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);
在此行中,您尝试将scanf()
中的time
的整数输入值存储为scanf()
。你的格式说明符在这里是错误的。
然后程序会终止,而不会释放你在其中分配的内存,也不会对你使用yum install chrony
的内容做任何事情。