C - memset与免费

use*_*266 0 c free memset

当调用memset时,我对内存中实际发生的事情感到困惑,而当你调用free时会发生什么.

例如,我有一个指向一个char*数组的指针A.

char** A = (char**)calloc(5, sizeof(char*));
int i;
for(i=0;i<5;i++)
{
  //filling
  A[i] = (char*)calloc(30, sizeof(char)); 
  scanf("%s", &A[i]);
}
Run Code Online (Sandbox Code Playgroud)

现在我想重置它我的char**指针和它指向的所有元素都是完全空的

memset(A, 0, 5);
Run Code Online (Sandbox Code Playgroud)

要么

free(A);
Run Code Online (Sandbox Code Playgroud)

有什么不同?

我对C有点新意,所以请以外行的话说话,谢谢

Edw*_*ard 9

不同之处在于memset实际设置内存块的值,同时free返回内存以供操作系统使用.

通过类比使用物理东西,memset(beer, 0, 6)应用于六包啤酒会将"0"的值应用于阵列的所有六个成员beer,而free(beer)相当于将六包装给朋友.


Som*_*ude 7

memset函数将内存区域设置为请求的值.请注意,您提供的大小是字节数.

free函数释放已分配的内存,因此无法再使用.调用free通常不会以任何方式修改内存.调用后使用内存free会导致未定义的行为.