当前位置:首页 » 编程语言 » c语言指针释放

c语言指针释放

发布时间: 2022-06-08 19:15:11

‘壹’ c语言 函数内指针返回后的释放问题

  1. 不会释放。

  2. 正确。

‘贰’ C语言函数调用完毕,函数里的变量指针都释放干净了吗

一般在函数中的变量指针都会释放,但是除了用*alloc取得的空间,还除了加了static的变量,加了static的变量只在程序退出后才释放,用*alloc取得的空间只在free后和程序结束时才释放。

‘叁’ C语言 关于指针释放空间问题

你的这个不是内存泄露,是没有给指针p正确分配空间,导致程序崩溃


代码修改如下

#include<stdio.h>
#include<stdlib.h>
intmain()
{
int*p=NULL;
inta=0x55;

p=(int*)malloc(sizeof(int));//加上这一行

*p=a;

free(p);
return(0);
}

‘肆’ 菜鸟求助 C语言链表工具指针的释放

你使用的 C 开发平台?
在 C++ 中 new 和 delete 都定义成了操作符
操作符重载 的声明与一般函数不同
如果要和C++兼容还是使用其他字
比如 New 和 Delete

void free(void * ptr) 是 stdlib.h 中定义的标准函数,与
void * calloc(size_t nmemb,size_t size);
void * malloc(size_t size);
void * realloc(void * ptr,size_t size);
对应配合释放空间

你在插入程序中哪里使用 free 了?
插入程序中你没有申请新的 你要释放什么?
程序中使用的 n 是在哪里声明的 作什么用

看了半天你删除函数 也搞不明白你删除的是第m个节点,还是m个节点
要删除一个节点,怎么使用两次 free?
删除函数的功能是肯定不正确

删除没有那么复杂
一、删除第m个节点;指针直接移动m节点,把next链接接到上一节点;释放该节点就ok.
二、删除关键字为m的节点;顺序查找比较关键字,找到后删除;
可能还有其他节点又相同的关键字,两种处理方法,
1 是只删除第一个找到的
2 是删除所有具有相同关键字的节点
bool Delete(struct pp * &k,int m) //删除第m个节点 不需要返回指针,成功 true 失败 false 链表头指针引用传送
{
struct pp *s1,*s3;
int i;
if(m<1||m>n)return false; //要删除的节点不存在 m 从1 计数
if(k==NULL)
return false; //空表
s3=k;
if(m==1){ //删除表头第一个节点
k=k->next; //k 是指针已用 可以修改
//不能修改 s1 或 s3
n--; //表长度减1
s3->next=NULL;
free(s3); //释放原第一个节点空间
return true;
}
for(i=1;i<m-1;i++)
s1=s1->next; //找到前一个
s3=s1->next;//s3指向该节点
s1->next=s3->next;//s1->next 指向要删除节点所连的下一个节点
//当 m=n时要删除最后一个节点,该算法仍然工作
//此时 s3-next=NULL
s3->next=NULL;
free(s3);
n--;
return true;
}

在插入函数中
如果你的m是位置,从0计数还是从1计数,

bool insert(struct pp * &b,struct pp *c,int m) //同样链表头指针引用传递
{
struct pp *s4;
int i;
if(m<=0||m>n+1)return false;//插入位置超界
//可以在m= n+1的位置插入
if(m=1){
c=b->next;
b=c;
n++;
return true; //空表插入第一个节点也工作
}
s4=b;

for(i=1;i<m;i++) //找到 m-1的位置
s4=s4->next;
c->next=s4->next; // c->next 指向原 m
s4->next=c; // (m-1)->next 指向 c
n=n+1; //表长度加1
}

在编函数是必须首先明确函数要实现的功能,可能遇到的情况和处理方法

‘伍’ 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语言指针释放的问题

这段话中有好几个错误。
1. 如果有int A, int *B = &A, 这时执行free(B) 一定引起内存错误。
free只能使用在动态分配的内存上,不能用在堆栈或静态数据上。
类似 int A,或 static int A,这样的变量定义,是在编译时已经确定了内存位置。
动态分配是在运行时,从堆中临时分配的内存块(用malloc,或new)。这些内存块需要用 free(malloc)或delete(new)释放;

2. 变量名实际是内存地址的代称,这句也不完全对
在程序中,变量名代表了“这个地址上的数值”,只有对变量使用&操作,才能得到变量的地址

3. free(B)应该释放了B这个指针变量
如果指针变量存放了一个动态得到的地址,free(B)释放的是变量B的数值(不是变量B的地址),由于变量B的数值是一个动态分配得到的地址,所以free释放的是动态地址。

‘玖’ C语言 指针函数 释放内存

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

‘拾’ C语言:指针所占空间系统自动释放

堆上分配的空间要手动释放,栈上的空间由系统释放
比如用malloc分配的是在堆上的,所以要用free手动释放
栈上空间比如说函数传如的值,由系统自动释放
比如
int*
a
=
malloc(100);
要free(a)释放a指向的内存,但a这个变量所占的空间不用管它,系统自动会处理的

热点内容
小米账号密码保险箱在哪里 发布:2024-05-17 10:17:00 浏览:752
抖音引流脚本推荐 发布:2024-05-17 10:11:16 浏览:724
sql数据库数据路径 发布:2024-05-17 10:00:25 浏览:132
ftp服务器程序 发布:2024-05-17 10:00:21 浏览:677
php中的函数 发布:2024-05-17 09:53:34 浏览:941
优质网站为什么用ip服务器 发布:2024-05-17 09:43:34 浏览:793
安卓机图片存在哪里 发布:2024-05-17 09:42:54 浏览:62
ip地址怎么查看服务器上的文件 发布:2024-05-17 09:29:51 浏览:980
轱轮算法 发布:2024-05-17 09:29:10 浏览:96
安卓手机锁屏密码一般怎么画 发布:2024-05-17 09:29:05 浏览:348