在将一个指针指向另一个指针之前,是否需要分配内存?

时间:2016-02-26 09:57:03

标签: c

我想了解两件事。覆盖malloced内存是什么意思。以下是否会被认为是覆盖,因为我将B分配给A.是否真的需要为B分配内存?如果有人这样做,那被认为是一种不好的做法吗?

#include <stdio.h>
#include <stdlib.h>

int main()
{

    typedef struct {
        int data;
    }somestruct;

    somestruct *A,*B;
    A = malloc(sizeof(somestruct));
    B = malloc(sizeof(somestruct));

    B = A;

    return 0;
}

考虑这段代码。在将a的值赋值给b时,我是否覆盖了内存。在这种情况下,我必须为b分配内存,这与前面的代码不同,如果我没有为b分配内存。有人可以解释1.我在这里覆盖记忆吗? 2.在将一个指针分配(另一个)时,是否总是需要为两个指针分配内存。

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int i=0;
    int *a=malloc(sizeof(int)*10);
    int *b=malloc(sizeof(int)*10);

    for(i=0;i<10;i++){
        a[i]=1;
    }

    for(i=0;i<10;i++){
        b[i]=a[i];
        printf("%d\n",b[i]);
    }
    return 0;
}

3 个答案:

答案 0 :(得分:2)

不,不是必需的。你不应该导致内存泄漏。

不要忘记free()通过malloc()创建的所有内容。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{

    typedef struct {
        int data;
    }somestruct;

    somestruct *A,*B;
    A = malloc(sizeof(somestruct));
    /* do not do this because this cause memory leak */
    /* B = malloc(sizeof(somestruct)); */

    B = A;

    free(A); /* do not forget to free the memory */
    return 0;
}

在第二个代码中,您正在使用其地址分配到ab的两个缓冲区,因此两个malloc()都是必需的。同样,不要忘记free()通过malloc()创建的所有内容!

答案 1 :(得分:1)

在第一个例子中:不需要为B的malloc内存。 下一个语句指向为A分配的内存。 2指针指向内存中的相同位置是完全正常的。

在第二个:它是有道理的。在那里,您将分配给A的内存中的值复制到为B分配的内存中。

答案 2 :(得分:1)

实际上,绝对不是将内存分配给B(然后通过为其分配A而丢失指向它的唯一指针)将导致代码中的内存泄漏。您不希望代码中出现内存泄漏。

结论:不,这样做是不必要的,也是不好的。