C 大型动态数组中未使用的内存会发生什么情况?

C 大型动态数组中未使用的内存会发生什么情况?,c,dynamic-memory-allocation,dynamic-arrays,C,Dynamic Memory Allocation,Dynamic Arrays,考虑以下代码行: char* f = (char *)(malloc(10240 * sizeof(char))); scanf(%s, f); 现在,当输入是任何字符数小于10240的字符串时,这个动态数组中的其余内存会发生什么变化 如果我想删除这个动态数组的一个元素而不改变这个动态数组的大小,我该怎么做 现在,当输入是任何字符数小于10240的字符串时,这个动态数组中的其余内存会发生什么变化 什么也没发生。你可以使用它,但你不需要使用它或做任何事情。当你只在一个5加仑的水桶里放一杯水时,它

考虑以下代码行:

char* f = (char *)(malloc(10240 * sizeof(char)));
scanf(%s, f);
现在,当输入是任何字符数小于10240的字符串时,这个动态数组中的其余内存会发生什么变化

如果我想删除这个动态数组的一个元素而不改变这个动态数组的大小,我该怎么做

现在,当输入是任何字符数小于10240的字符串时,这个动态数组中的其余内存会发生什么变化


什么也没发生。你可以使用它,但你不需要使用它或做任何事情。

当你只在一个5加仑的水桶里放一杯水时,它会发生什么?它仍然是一个5加仑的桶,它只是坐在那里,大部分是空的。如果您想回收空间用于其他用途,您可以将水倒入一个较小的杯子中,然后返回桶(即,分配一个新的内存块,刚好足够容纳字符串,复制字符串,然后
free()
the big block),或者使用
realloc()
神奇地收缩存储桶。

阵列的其余部分不会发生任何事情。这意味着它是否仍然为空?它确实保持不变(即以前应用程序中的垃圾)
malloc
不会初始化分配的内存块。所以,以前在这些地方发生的事情都会发生
scanf
不会触及输入字符串长度以外的任何内存位置。@kartikeykant18不确定“空”是什么意思。
scanf()
之后的字节以空字节终止,但仍保持未初始化状态。