malloc in for循环

use*_*300 2 c memory-management

我有一个问题......让我说我有以下部分代码:

int *a,*a1,*a2;
for (i=1; i<=2; i++) {
    a=malloc(sizeof(int));
    if (i==1) a1=a;
    else if (i==2) a2=a;
}
*a1=5;
*a2=4;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如果我使用printf打印a1和a2变量a1将得到值5而a2值为4?所以,如果我使用malloc来分配内存和该内存空间中的一个点并再次使用malloc来分配内存然后指向内存的不同部分,但内存的第一部分仍然存在?或者如果我再次使用malloc,它将擦除内存的第一部分,它将写入新的内存部分

Eri*_*hil 9

每次调用都会malloc返回一个指向不同内存的指针,直到你调用free释放该内存为止.

  • @ user1809300:基本上,是的.请注意,`malloc`不会创建内存,也不会擦除内存.`malloc`只管理内存.如果它需要更多内存,它将从操作系统请求它.它保留了自己的内存记录.当你调用`malloc`时,它会在其记录中进行所需的任何更改,并返回一个指向空间的指针,该空间仅供您使用.(或者,如果它无法提供内存,它将返回NULL.)它不会将该空间用于其他任何内容.当你调用"free"时,它会调整记录以显示该空间可以被重用. (2认同)
  • @ user1809300:`malloc`是可移植的,由C标准定义. (2认同)
  • @user1797612:您错过了保持沉默的绝佳机会。请考虑删除您的误导性和误导性评论。 (2认同)