当前位置:首页 » 编程语言 » c语言指针内存释放函数封装
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言指针内存释放函数封装

发布时间: 2022-08-10 12:54:23

⑴ 求助:用C语言指针编写一个函数alloc(n) 在内存区开辟和释放一个连续空间

char _gacMemBlk[1000];
char * _gpcMemBlkBgn = _gacMemBlk;
int _giPos = 0;

void * alloc(int n)
{
if (1000 - _giPos < n)
return NULL;
char * p = _gpcMemBlkBgn + _giPos;
_giPos += n;
return (void *)p;
}

void free(void * p)
{
}

// 注:alloc, free不像你描述的那么简单,其实每次分配还要用一个连表记录下来其位置和大小,而每次分配不一定要从末尾开始分,而是在连表中找一块空白的,分一砣,剩下的又是一块插到连表中,而释放的时候,如果前后更好挨着,则需要合并

⑵ C语言 指针函数 释放内存

一时看不明白你的代码。一个原则是,start指向了谁。如果指向了在这个函数中定义的临时自动型数组,那必然存在返回局部数组指针的问题,就是你说的内存释放问题。这样虽然指针被返回了,但它指向的内容已经不受代码控制了,很危险。但如果start指向的是在主函数中声明的数组,或是全局或静态数组(这个函数中定义的静态数组也行),或者是用动态分配法获得的内存空间且未曾释放,则不存在任何问题,是完全合理合法的。用动态分配法时要注意在不用时释放内存空间,以免造成内存泄漏。

⑶ C语言 函数内指针返回后的释放问题

  1. 不会释放。

  2. 正确。

⑷ C语言 指针编写一个函数alloc(n) 在内存区开辟和释放一个连续空间

#include <stdio.h>

#define LEN (1000)

unsigned char base[LEN];
unsigned char *p=(unsigned char *)base;

void *Alloc(unsigned int n)
{
unsigned char *pp=p;
if(p+sizeof(unsigned int)+n<base+LEN&&n>0)
{
*(unsigned int*)p=n;
p+=sizeof(unsigned int)+n;
pp+=sizeof(unsigned int);
}
else
{
pp=NULL;
}
return pp;
}

void Free(unsigned char *ptr)
{
if(!ptr)
return;
p-=sizeof(unsigned int)+*(unsigned int *)(ptr-sizeof(unsigned int));
}

int main()
{
unsigned char *a=NULL;
printf("base=%p,p=%p,a=%p\n",base,p,a);
a=Alloc(10);
printf("base=%p,p=%p,a=%p\n",base,p,a);
Free(a);
printf("base=%p,p=%p,a=%p\n",base,p,a);
return 0;
}

⑸ C语言 内存释放的问题

1、这样没有问题,不会造成内存泄露
2、当你不再使用这个buffer变量的时候就 free(buffer),buffer地址指向的空间就被释放掉了
在你的主函数中 这样使用
A *buffer=function();
//这里使用buffer
free(buffer); //施放内存
//有这一句就不会内存泄露了

内存泄露是对内存失去了控制,造成了内存的浪费,所以你要控制住你分配的内存
内存泄露典型例子是这样子的
A *buffer=function(); //buffer指向一段内存
buffer=function(); //buffer指向一段新内存,原来的内存没有释放,而且已经失去了对它的控制

⑹ C语言 指针的释放问题

前提是这个指针使用malloc、realloc、calloc动态申请来的,当你不使用这个指针时,就释放掉,在什么地方释放都是可以的,关键是这个指针没有被修改过

⑺ C语言数组指针内存释放

//用指针的指针当二维数组请参考以下代码
#include<stdio.h>
#include<stdlib.h>
intmain(){
int**b;
b=(int**)malloc(sizeof(int*)*4);//二维数组b有4行

for(inti=0;i<4;i++)//替每行分配存储空间
b[i]=(int*)malloc(sizeof(int)*3);//二维数组b每行3列

for(inti=0;i<4;++i)for(intj=0;j<3;j++)
b[i][j]=i*j;

for(inti=0;i<4;++i){
for(intj=0;j<3;j++)
printf("%5d",b[i][j]);
printf(" ");
}

for(inti=0;i<4;i++)
free(b[i]);//释放每行的存储空间
free(b);//释放b
return0;
}

⑻ C语言中是如何释放内存单元的;原理又是什么

C管理内存大致可以理解为两种,分配在栈上的,一个是分配在堆上的。

临时变量,动态变量,分配在栈上,运行完,直接弹出栈,就没了。
分配在堆上的内存,释放的时候,基本上可以理解为,指针不指这里了。也就失去了对这块内存的控制。其实所谓的释放。字面意思容易让人理解错。
有些机器有些操作系统,会在释放的时候清空这段内存,但是这种做法效率不高,但是安全,很少有机器这么做,多数都是所谓释放,就是不让你控制这块内存了而已。