"ptr = malloc(sizeof(char)*10)"使用多次,一个接一个地分配指向同一个内存块的指针还是导致内存泄漏?

Tho*_*hom 3 c malloc pointers memory-leaks

假设我的程序中有以下代码:

char *ptr;
ptr=malloc(sizeof(char)*10);
ptr=malloc(sizeof(char)*10);
ptr=malloc(sizeof(char)*10);
ptr=malloc(sizeof(char)*10);
Run Code Online (Sandbox Code Playgroud)

将一个指向同一个存储块被分配给ptr每一个时间,或存储器的独立件来每次保留和它的指针分配给ptr,导致内存泄漏每次malloc()被调用?

我还在学习C,所以如果它太基础我就忍受.我试着谷歌搜索,但没有找到答案.

编辑::

谢谢你的回答.请告诉我,如果我的这种方法处理内存泄漏风险.我的程序只需要5个人的名字并显示它,而不使用静态数组.阅读完你的答案后,我把它free(ptr)放在循环中,其他之前,我计划在循环之后只使用一次循环之后.我现在纠正了吗?

#include <stdio.h>
#include<stdlib.h>
#include<string.h>

int main ()
{
char *names[5],*ptr;
int i;

for(i=0;i<=4;i++)
{
    ptr=malloc(sizeof(char)*10);
    printf("Enter name no.%d : \n",i+1);
    scanf("%s",ptr);
    names[i]=malloc(strlen(ptr)+1);
    strcpy(names[i],ptr);
    free(ptr);


}
for(i=0;i<=4;i++)
printf("%s\n",names[i]);

}
Run Code Online (Sandbox Code Playgroud)

小智 6

malloc()将永远不会多次返回相同的内存块,除非(当然)它free()自上次返回以来已经过去了.这是由C标准保证的.因此,您的代码也会泄漏内存.任何两次分配同一块内存的内存分配器都会比无用的更糟糕:应用程序会依靠自己的脚趾,使用同一块内存用于不同目的,可能同时使用.

编辑:禁止缓冲区溢出问题,您的代码是正确的,因为它释放了引用的10-char缓冲区ptr.free(ptr)在循环之外只调用一次,确实是不正确的.但是,您的代码(如此处所示)不会释放稍后在存储的循环体中分配的内存names[i].