求教C语言内存过剩的解决办法!! (c linux 线程释放内存空间)

首先我想说一下new和delete不是C语言里面的东西,那是C++里面的。还有就是for(int

i=0;i

#include

void

main()

{

int

a,

sum=0;

printf(“蠢配请输入学科数目:”);

scanf(“%d”,

&a);

int*

b

=

(int*)malloc(a*sizeof(int));

//动态分配内存空间

printf(“请输入学科数目:”);

int

i;

for(i=0;

i

i++)

{

scanf(“%d”,

&b);

sum

+=

b;

}

printf(“该学生总成绩:%d\n”,

sum);

free(b);

//释放分配的内存空间

}

解释:malloc函数用于分配内存空间,在这里您输入的为a个学科,所以要用到a个整数用来存储各科成绩,而每一个整数占用内存为sizeof(int),总共有a个整数猛散,所以分配a*sizeof(int)个字节的空间,程序运带知指行完毕之后需要释放分配的内存空间,用free()函数释放,否则程序退出会造成内存泄露。

谢谢采纳。

实际像这种数据库方面的

都不是直接定义数组的

相关问题拓展阅读:

多线程中使用并释放 堆内存

无论是类方法或实例方法,当其被调用时,方法中的局部变量才被分配内存空间,方法调用完毕,局部变量即刻释放所占的内存。

根据《java虚拟机规范》里提到的 多个实例在内存享一个方法块,方法存放在code segment中的,而且是多个对象共享一个代码空间。

只要你这个方法不持有类变量或实例变量或其它公共资源,是不存慎手在并发同步问题的!

同时在《深入java虚拟机第二版》里有提到,每当线程调用一个java方法时,虚拟机誉团都会在该线程的java 栈中压入一个新帧。而这个新帧自然就成为了当前帧,在执行这个方法时,它使用这个帧来存储参数,局部变量,中间运算结果等数据。 也就是说多个线程调用同一个方宽虚嫌法,它们的参数都被压入栈帧,但只有一个栈帧是当前帧,也就不存在你担心的问题

给你贴一段MSDN对于_endthread的说明:

You can call _endthread or _endthreadex explicitly to terminate a thread; however, _endthread or _endthreadex is called automatically when the thread returns from the routine passed as a parameter to _beginthread or _beginthreadex.

上面已经说的很清楚了:)

1)你可以显示的调用_endthreadex来结束线程;

2)当_beginthreadex传入的函数执行完枣樱培毕并返回时,_endthreadex会被自动凳唯颂橘调用。

也就是说,调用不调用都可以,不会影响recovery of resources allocated for the thread。

c linux 线程释放内存空间的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c linux 线程释放内存空间,求教C语言内存过剩的解决办法!!,多线程中使用并释放 堆内存的信息别忘了在本站进行查找喔。


数据运维技术 » 求教C语言内存过剩的解决办法!! (c linux 线程释放内存空间)