C++ free()函数的应用

#include<stdio.h>
#include<malloc.h>
#include"math.h"
#define null 0
typedef struct pnode//定义一个结点
{
float a;//定义系数
int b;//定义指数
struct pnode *next;
};
struct pnode *head;//定义头结点
void creatnode()//创建单链表,输入多项式各项系数
{
int i,n;
struct pnode *p;
struct pnode *t;
p=(struct pnode*)malloc(sizeof(struct pnode));//开辟一个pnode型长度的空间 并将地址给p
p->next=null;head=p;p->a=0;p->b=0;//将p指向的结点赋初值
printf("输入项数 n=");
scanf("%d",&n);//输入项数
for(i=n;i>0;--i)//逆位序向链表输入各项系数与对应指数
{
t=(struct pnode*)malloc(sizeof(struct pnode));
printf("输入第%d项 系数a=,指数b=",i);
scanf("%f,%d",&t->a,&t->b);//输入系数与对应指数
t->next=p->next;p->next=t;
}
}//creatnode
float result(float x)//计算和函数的值
{
struct pnode *temp;
double sum=0.0;
struct pnode *t;
t=head->next;
while(t)//当t不为0时执行一下循环,直至t为0时结束
{
sum=sum+(t->a)*pow(x,t->b);//计算各项之和
t=t->next;//移动指针,指向下一个结点
}
return(sum);//返回计算结果
}//result
void main()
{
float result(float x);
float c,d;
creatnode();//执行creatnode()函数
printf("输入未知数 x=");
scanf("%f",&c);//输入x的值
d=result(c);//返回计算结果给d
printf("answer is %f\n",d);
}//main
怎么清空开辟的链表?程序没有错

free()为C语言函数。
头文件:malloc.h或stdlib.h
作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数。
使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。
用 法: void free(void *ptr);

程序例:
#include <string.h>
#include <stdio.h>
#include <alloc.h> //or #include <malloc.h>
int main(void)
{
char *str;
/* allocate memory for string */
str = (char *)malloc(10);
/* copy "Hello" to string */
strcpy(str, "Hello");
/* display string */
printf("String is %s\n", str);
/* free memory */
free(str);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-03
#include<stdio.h> #包括<stdio.h>
#include<malloc.h> #包括<malloc.h>
#include"math.h" #包括“math.h”
#define null 0 0#定义空
typedef struct pnode//定义一个结点 typedef结构pnode / /定义一个结点
{ (
float a;//定义系数浮动1 / /定义系数
int b;//定义指数诠释B组; / /定义指数
struct pnode *next;结构pnode *未来;
}; );
struct pnode *head;//定义头结点结构pnode *头; / /定义头结点
void creatnode()//创建单链表,输入多项式各项系数无效creatnode()/ /创建单链表,输入多项式各项系数
{ (
int i,n;诠释我,氮;
struct pnode *p;结构pnode *磷;
struct pnode *t;结构pnode *吨;
p=(struct pnode*)malloc(sizeof(struct pnode));//开辟一个pnode型长度的空间 并将地址给p P值(结构pnode *)malloc的(大小(结构pnode ));//开辟一个pnode型长度的空间并将地址给p
p->next=null;head=p;p->a=0;p->b=0;//将p指向的结点赋初值的p ->“下一步=无效;头= 06;的p -> 1 = 0;的p -> b = 0时,/ /将p指向的结点赋初值
printf("输入项数 n=");输出(“输入项数例”);
scanf("%d",&n);//输入项数 scanf函数(“%d个”,&n)的; / /输入项数
for(i=n;i>0;--i)//逆位序向链表输入各项系数与对应指数对(我= n的,我> 0; - 我)/ /逆位序向链表输入各项系数与对应指数
{ (
t=(struct pnode*)malloc(sizeof(struct pnode));吨=(结构pnode *)malloc的(大小(结构pnode));
printf("输入第%d项 系数a=,指数b=",i);输出(“输入第%d个项系数1 =,指数b =”,i)条;
scanf("%f,%d",&t->a,&t->b);//输入系数与对应指数 scanf函数(“%男,%d个”,&T型> 1,&T型>二)/ /输入系数与对应指数
t->next=p->next;p->next=t;的T ->“下一步=的P ->”下一步;的p ->“下一步=吨;
} )
}//creatnode )/ / creatnode
float result(float x)//计算和函数的值浮动结果(浮动十)/ /计算和函数的值
{ (
struct pnode *temp;结构pnode *气温;
double sum=0.0;双总和= 0.0;
struct pnode *t;结构pnode *吨;
t=head->next;吨=头>“下一步;
while(t)//当t不为0时执行一下循环,直至t为0时结束而(吨)/ /当不为0吨时执行一下循环,直至吨为0时结束
{ (
sum=sum+(t->a)*pow(x,t->b);//计算各项之和总和=总和+(T型> 1)*战俘(十,T型>二); / /计算各项之和
t=t->next;//移动指针,指向下一个结点吨=吨->“下一步; / /移动指针,指向下一个结点
} )
return(sum);//返回计算结果收益率(金额)/ /返回计算结果
}//result )/ /结果
void main()无效的主要()
{ (
float result(float x);结果浮动(浮动x)的;
float c,d;浮动的C,D;
creatnode();//执行creatnode()函数 creatnode ();//执行creatnode()函数
printf("输入未知数 x=");输出(“输入未知数x =”);
scanf("%f",&c);//输入x的值 scanf函数(“%f”中,&c)项; / /输入x的值
d=result(c);//返回计算结果给d Ð =结果(三)/ /返回计算结果给Ð
printf("answer is %f\n",d);输出(“答案是%女\ N”的,四);
}//main )/ /主
怎么清空开辟的链表?程序没有错怎么清空开辟的链表?程序没有错
第2个回答  2015-10-06
#include<stdio.h>
#include<malloc.h>
#include"math.h"
#define null 0
typedef struct pnode//定义一个结点
{
float a;//定义系数
int b;//定义指数
struct pnode *next;
};
struct pnode *head;//定义头结点
void creatnode()//创建单链表,输入多项式各项系数
{
int i,n;
struct pnode *p;
struct pnode *t;
p=(struct pnode*)malloc(sizeof(struct pnode));//开辟一个pnode型长度的空间 并将地址给p
p->next=null;head=p;p->a=0;p->b=0;//将p指向的结点赋初值
printf("输入项数 n=");
scanf("%d",&n);//输入项数
for(i=n;i>0;--i)//逆位序向链表输入各项系数与对应指数
{
t=(struct pnode*)malloc(sizeof(struct pnode));
printf("输入第%d项 系数a=,指数b=",i);
scanf("%f,%d",&t->a,&t->b);//输入系数与对应指数
t->next=p->next;p->next=t;
}
}//creatnode
float result(float x)//计算和函数的值
{
struct pnode *temp;
double sum=0.0;
struct pnode *t;
t=head->next;
while(t)//当t不为0时执行一下循环,直至t为0时结束
{
sum=sum+(t->a)*pow(x,t->b);//计算各项之和
t=t->next;//移动指针,指向下一个结点
}
return(sum);//返回计算结果
}//result
void main()
{
float result(float x);
float c,d;
creatnode();//执行creatnode()函数
printf("输入未知数 x=");
scanf("%f",&c);//输入x的值
d=result(c);//返回计算结果给d
printf("answer is %f\n",d);
}//main

如果要清空开辟的链表,添加这样一个模块:
void destory(struct pnode **head)
{
struct pnode *p,*q;
p=*head;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);
}
*head=NULL;
}
这样应该就行了,在主函数结束前加上destory(&head);
第3个回答  推荐于2017-12-15
添加这样一个模块:
void destory(struct pnode **head)
{
struct pnode *p,*q;
p=*head;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);
}
*head=NULL;
}
这样应该就行了,在主函数结束前加上destory(&head);本回答被提问者采纳
第4个回答  2010-04-18
这个程序的删除链表函数如下:

void dellist(void)
{
struct pnode *a=head,*b=NULL;

while (a)
{
b=a->next;
free(a);
a=b;
}
}

C++ free()函数的应用
free()为C语言函数。头文件:malloc.h或stdlib.h 作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数。使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。用 法: void free(void *ptr);程序例:include <string.h> include <stdio.h> include <alloc.h> ...

c++的“free”
free以后就不能再用这块内存。因为说不定它又被分给其他变量用。那就全乱了,而且不好查错。实际应用中这种写法是大忌,所以讨论这样的输出结果是没有意义的。记住free一定要放到最后!还有每次最好free后清零。free(str);str=NULL;

用free函数需要注意什么
free(void *p)函数是用来释放程序动态申请的内存。其参数是个指针类型。在C当中,只有当使用了动态内存申请函数malloc calloc realloc申请内存之后,才可以使用free来释放之。释放之后就不能再使用了。在C++中,除了上述函数之外,还有new操作之后,都要使用free函数。切记,动态申请内存使用完后,一定要记...

C++ free()
delete是释放new开辟的内存。new和delete 开辟再堆中内存时候会调用构造函数和析构函数 malloc和free不会调用。free释放内存,并不是真正意义上的把那块内存清空了,他只是告诉操作系统这块内存可以被再次使用,如果操作系统以后用这块内存的话就会把上面的数据覆盖掉。malloc多大内存就要用free多大内存。

C语言malloc与free函数的用法
void 类型。void 表示未确定类型的指针。C,C++规定,void 类型可以强制转换为任何其它类型的指针。通俗讲就是一个分配空间的函数,在头文件”stdlib“内,给一个变量或指针分配一定大小的空间,一般要与size一起用。他的返回值是用处不大。free是一个释放空间的函数,经malloc等函数分配空间后,取消其...

C语言malloc与free函数的用法
free(void*ptr);功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。【例】分配一块区域,输入一个学生数据。main(){ struct stu { int num;char *name;char sex;float score;} *ps;ps=(struct stu*...

C++free释放问题
free函数是由C语言继承而来的,是和malloc配对的,而不能和new配对。free释放内存的和delete可以说是两套代码,它们的逻辑不同,不能混用。用new申请的就要用delete翻译,用malloc申请的就要用free释放。顺便说一下它们还有一个区别, free 只是告诉操作系统回收内存,而delete会先调用类的析构函数,然后...

malloc free 的用法
malloc用于动态内存分配,它有一个参数就是分配的空间大小,反回值是分配来的空间的首地址 比如 int *p = (int*)malloc(4096);代表我要申请4K的内存空间用于存放整数,而一个整数是4B,这样申请来的空间就是能存1K个整数 free用于动态内存分配的释放工作,它有一个参数就是要释放的内存的首地址 ...

关于C语言free函数的问题?
简单解释:你用malloc申请一个3平米的房间,房卡是a 你告诉计算机,房间不用了,但是你没有把a还回去,就是没有让a=null 如果房间没有新人来,你还可以用a开门,并且看到你睡过的床、用过的毛巾。但是很快,房间有新人入住了,但是没有换房卡(也换不了)。这时你用a开门进去,面临的将是很严重...

C++中new申请的内存,可以用free释放吗
{ _num = new int; } virtual ~Test() { delete _num; }private: int* _num;};int main() { Test* t = new Test; free(t); \/\/此时由于 Test 的析构函数没有被调用,将导致为 _num 申请的内存没有被释放。 return 0;} ...

相似回答