如果你是调试程序的话,不会造成内层泄露,因为这样的话,程序是有系统监管的。
如果你是在独立运行程序而不是在调试状态的话,就会造成内存泄露了,因为你分配的内存没有释放啊!
所以,一个可用的程序一旦用了malloc,就需要free来释放已经分配的内存啊!
人家的做法,在链表中,用free销毁是在链表或结点删除销毁的时候执行的,可能人家没有贴出来销毁链表的函数啊
看是不是该加分了?
已经改正。。。我使用vc60编译的
#include <stdafxh>
#include "stdioh"
#include <stdlibh>
#include "stringh"
#include"malloch"
typedef int elemType;
typedef struct Node //定义单链表节点类型
{
elemType data;
struct Node next;
}Node;
void initList(NodepNode) //初始化链表,即设置单链表的表头指针为空
{
pNode=NULL;
printf("iniList函数执行,初始化成功\n");
}
NodecreatList(NodepHead) //创建线性链表,此函数输入负数终止读取数据
{
Node p1;
Node p2;
p1=p2=(Node)malloc(sizeof(Node)); //申请新结点
if(p1==NULL||p2==NULL)
{
printf("分配内存失败\nz");
exit(-1);
}
memset(p1,0,sizeof(Node)); //将p1设置为0,也就是清空p1
printf("请输入新的节点:\n");
scanf("%d",&p1->data); //输入新结点
p1->next=NULL; //新结点的指针为空
while(p1->data>0)
{
if(pHead==NULL) //空表,接入表头
{
pHead=p1;
}
else
{
p2->next=p1;
p2=p1; //非空表,接入表尾
}
//将p2移动到表尾
p1=(Node)malloc(sizeof(Node)); //z再重新申请一个结点
if(p1==NULL||p2==NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
memset(p1,0,sizeof(Node)); //将p1设置为0
scanf("%d",&p1->data);
}p2->next=NULL;
printf("creatList执行,;链表创建成功\n");
return pHead;
}
void printList(Node pHead) //打印链表,链表的遍历
{
if(NULL==pHead) //链表为空
{
printf("printList 函数执行,;链表为空\n");
}
else
{
while(NULL!=pHead)
{
printf("%d",pHead->data);
pHead=pHead->next;
}
printf("\n");
}
}
int main()
{
Node pList=NULL;
int length = 0;
initList(&pList); //链表初始化 printList(pList); //遍历链表,打印链表
pList=creatList(pList); //创建链表
printList(pList);
}
if(head==NULL)
{
head=p;
}
错在双等号表示等于判断,以后写NULL与变量的判断,NULL写在前面,NULL =head 这样就会报错,能够找到自己出错的地方,head =NULL 逻辑上错了,语法上正确,不易查找到出错点
int main(){
inta;
int i=0;
int n,k;
scanf("%d,%d",&n,&k); //变量用地址,注意格式控制,输入时两数间也要有逗号,如2,2
a=(int)malloc(nsizeof(int));
for(i=0;i<n;i++)
{
scanf("%d",&a[i]); //&a[i]
}
patition(a,a[0],4,a[n]);
free(a);
return 0;
}
//程序可能还有其他问题,能执行,但没有输出。
可能有几种情况:
1程序没有等待输入输出,很快的运行完毕并退出了
2程序没有等待输入,很快计算完毕输出并退出了
3程序一运行就出错退出了
你没说详细情况也没有代码,不明白你说的是哪种情况,你到命令行下,进到程序所在目录,手动输入程序名并回车,看看命令上有无提示信息吧
看了你的描述,升级到1903问题依然存在 换过系统 换过内存 恢复过原厂设计 都解决不了。估计是内存控制器出现问题,现在AMD的内存控制器集成在APU里面。
重装几个系统都不能解决内存问题,而且故障前的系统也不行,那么一定是硬件问题。
建议用debug卡(电脑诊断卡)查一下,具体是哪里的问题。可以从网上买一个,也不贵,如图。最后请采纳。
1 malloc后的内存除了等到free来释放,还可以等到程序运行结束时自动释放
2 程序运行过程中,如果一直malloc内存而不释放会导致这部分内存不能被再次使用,即内存泄露。这样以来,应用程序会逐渐用光所有可用的内存,最终导致应用程序因内存不足而崩溃停止。
3 所以一个好的习惯是,malloc后一定要记得free之。
以上就是关于为什么我在调试这个程序时malloc总是无法正确的申请内存全部的内容,包括:为什么我在调试这个程序时malloc总是无法正确的申请内存、c语言 创建单链表 编译运行时程序停止工作是哪里出错呢、c++编程,在编译时没问题,运行时,输入数据之后,程序就会d出对话框“程序已停止工作”,为什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)