[英]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;
}
在第二個代碼中,您使用了兩個緩沖區,它們的地址都分配給a
和b
,因此兩個malloc()
都是必需的。 同樣,不要忘記將通過malloc()
創建的所有內容都free()
給free()
malloc()
!
在第一個示例中:不需要為B分配內存。下一條語句使其指向為A分配的內存。兩個指針指向內存中的同一位置是完全正常的。
第二點:這很有意義。 在那里,您將值從分配給A的內存復制到分配給B的內存。
實際上,絕對不可以,將內存分配給B(然后通過為A分配唯一的指針,然后丟失指向它的唯一指針)將導致代碼中的內存泄漏。 您不希望代碼中發生內存泄漏。
結論:不,這樣做既不必要又不好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.