繁体   English   中英

malloc in for循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM