为什么我在调试这个程序时malloc总是无法正确的申请内存

为什么我在调试这个程序时malloc总是无法正确的申请内存,第1张

如果你是调试程序的话,不会造成内层泄露,因为这样的话,程序是有系统监管的。

如果你是在独立运行程序而不是在调试状态的话,就会造成内存泄露了,因为你分配的内存没有释放啊!

所以,一个可用的程序一旦用了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出对话框“程序已停止工作”,为什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10109815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存