[英]malloc in for loop
我有一个问题......让我说我有以下部分代码:
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;
所以我的问题是,如果我使用printf打印a1和a2变量a1将得到值5而a2值为4? 所以,如果我使用malloc来分配内存和该内存空间中的一个点并再次使用malloc来分配内存然后指向内存的不同部分,但内存的第一部分仍然存在? 或者,如果我再次使用malloc,它将擦除内存的第一部分,它将写入新的内存部分
每次调用malloc
返回一个指向不同内存的指针,直到您调用free
释放该内存为止。
如果我使用printf打印a1和a2,变量a1将具有值5而a2将具有值4?
呃......不。
a1
(类型为int *
,即指向整数的指针 )将包含第一次调用malloc()
产生的地址 。
a2
(和a
),也是指针类型,将包含第二次调用malloc()
产生的地址 。
a1
的地址将指向一个整数,您为其指定了值5。
a2
(和a
)中的地址将指向一个整数,您为其赋值4。
这两个整数将保持分配状态,直到您通过在其地址上调用free()
来释放它们。 注意 :在调用例如free( a2 )
,不再分配整数。 在同一地址上再次调用free()
(例如通过free( a )
,或通过第二次调用free( a2 )
)将导致未定义的行为(即,如果运气好,您的程序将崩溃)。
指针是地址值 。 看来这就是你的困惑所在:它与它指向的东西不同。
我相信你的问题的答案是肯定的。 Malloc'ing将为您提供(至少)指定大小(如果可用)的内存位置。 它不释放任何内存,只给你更多(使用free()
来释放malloc的内存)。
你正在使用一些临时变量a
的事实没有意义。 在这个循环结束时a == a2 != a1
如果我使用printf打印a1和a2,变量a1将具有值5而a2将具有值4?
是的,你是对的。 不过,这是一个有点奇怪的问题,因为它更容易尝试看,而不是问。
所以,如果我使用malloc来分配内存和该内存空间中的一个点并再次使用malloc来分配内存然后指向内存的不同部分,但内存的第一部分仍然存在?
那是对的。 malloc()
分配“存在”的内存,直到你使用free()
释放它,或者执行一个realloc()
,它可能会将你的数据移动到另一个内存并释放旧的内存位置。 我建议你阅读一些关于它的文档。 至少是手册页 。
此外,您的代码有错误。 您使用赋值而不是比较,而变量i
未定义。 这是一个带有printf()
的更正版本:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *a,*a1,*a2;
int i;
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;
printf("a1=%d, a2=%d\n", *a1, *a2);
free(a1);
free(a2);
return EXIT_SUCCESS;
}
希望能帮助到你。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.