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].