我想了解两件事。覆盖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;
}
答案 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;
}
在第二个代码中,您正在使用其地址分配到a
和b
的两个缓冲区,因此两个malloc()
都是必需的。同样,不要忘记free()
通过malloc()
创建的所有内容!
答案 1 :(得分:1)
在第一个例子中:不需要为B的malloc内存。 下一个语句指向为A分配的内存。 2指针指向内存中的相同位置是完全正常的。
在第二个:它是有道理的。在那里,您将分配给A的内存中的值复制到为B分配的内存中。
答案 2 :(得分:1)
实际上,绝对不是将内存分配给B(然后通过为其分配A而丢失指向它的唯一指针)将导致代码中的内存泄漏。您不希望代码中出现内存泄漏。
结论:不,这样做是不必要的,也是不好的。