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

C 在将一个指针分配给另一个指针之前,是否需要分配内存?,c,C,我试图理解两件事。覆盖malloced内存意味着什么。由于我正在将B分配给A,以下内容是否会被视为覆盖。是否确实需要为B分配内存?。如果有人这样做,这被认为是一种不好的做法吗 #include <stdio.h> #include <stdlib.h> int main() { typedef struct { int data; }somestruct; somestruct *A,*B; A = malloc(si

我试图理解两件事。覆盖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;
}
#包括
#包括
int main()
{
类型定义结构{
int数据;
}somestruct;
somestruct*A,*B;
A=malloc(sizeof(somestruct));
B=malloc(sizeof(somestruct));
B=A;
返回0;
}
考虑这段代码。将a的值分配给b时是否覆盖内存。在本例中,我必须为b分配内存,这与前一种情况不同,在这种情况下,如果我不为b分配内存,代码就会工作。有人能解释一下吗。我正在改写这里的记忆。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;
}
#包括
#包括
int main()
{
int i=0;
int*a=malloc(sizeof(int)*10);
int*b=malloc(sizeof(int)*10);

对于(i=0;iNo),它不是必需的。您不应该导致内存泄漏

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

#包括
#包括
内部主(空)
{
类型定义结构{
int数据;
}somestruct;
somestruct*A,*B;
A=malloc(sizeof(somestruct));
/*不要这样做,因为这会导致内存泄漏*/
/*B=malloc(sizeof(somestruct))*/
B=A;
释放(A);/*别忘了释放内存*/
返回0;
}

在第二个代码中,您使用的两个缓冲区的地址都分配给
a
b
,因此这两个
malloc()
都是必需的。同样,不要忘了
free()
在第一个示例中通过
malloc()

创建的所有内容:不需要为b使用malloc内存。 下一条语句指向为A分配的内存。 两个指针指向内存中的同一位置是完全正常的


在第二种情况下:这是有意义的。您将值从分配给A的内存复制到分配给B的内存。

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


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

我真的不想回答,因为这里有两个不同的问题。请编辑并提出一个问题。请您扩展一下,在第二种情况下使用两个缓冲区是什么意思。如果我在第一种情况下等同于结构的成员,我会同时使用两个缓冲区吗EN
#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;
}