2016-02-26 81 views
2

我想了解兩件事情。什麼意思是覆蓋一個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分配內存的話。有人可以解釋一下嗎?我在這裏覆蓋內存嗎? 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; 
} 
+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()創建的一切!

+0

您可以通過在第二種情況下使用兩種緩衝區來擴展您的意思嗎?如果我在第一種情況下將結構的成員等同起來,那麼我會使用兩種緩衝區嗎? –

1

在第一個例子中:不需要B的malloc內存。 下一條語句指向爲內存分配的內存。 2個指針指向內存中的相同位置是完全正常的。

在第二個:它是有道理的。在那裏,您將從分配給A的內存中的值複製到分配給B的內存中。

1

絕對不是,事實上,將內存分配給B(然後通過分配A給它分配內存的唯一指針)將會導致代碼中的內存泄漏。你不想在代碼中發生內存泄漏。

結論:不,它不必要和不好做。

相關問題