簡體   English   中英

在將一個指針分配給另一個指針之前是否需要分配內存?

[英]Do you need to allocate memory before assigning one pointer to the other?

我試圖理解兩件事。 覆蓋已分配的內存是什么意思。 由於將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;
}

不,不是必需的。 您不應該導致內存泄漏。

不要忘記將通過malloc()創建的所有內容都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()都是必需的。 同樣,不要忘記將通過malloc()創建的所有內容都free()free() malloc()

在第一個示例中:不需要為B分配內存。下一條語句使其指向為A分配的內存。兩個指針指向內存中的同一位置是完全正常的。

第二點:這很有意義。 在那里,您將值從分配給A的內存復制到分配給B的內存。

實際上,絕對不可以,將內存分配給B(然后通過為A分配唯一的指針,然后丟失指向它的唯一指針)將導致代碼中的內存泄漏。 您不希望代碼中發生內存泄漏。

結論:不,這樣做既不必要又不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM