2016-02-26 48 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给它分配内存的唯一指针)将会导致代码中的内存泄漏。你不想在代码中发生内存泄漏。

结论:不,它不必要和不好做。

相关问题