C语言动态内存分配
题目:输入一个变量N,在输入N个数,计算平均值,最大值,最小值并输出,建议用动态内存分配实现我的代码:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i,N;
float average=0,max,min,*p=NULL;
scanf("%d",&N);
p = (float *)malloc(N*sizeof(float));
for(i=0;i<N;i++);
scanf("%f",&p);
max = p;
min = p;
for(i=0;i<N;i++)
{
average += p;
if(p>max)
max = p;
if(p<min)
min = p;
}
free(p);
average /= N;
printf("average = %.2f\nmax = %.2f\nmin = %.2f\n",average,max,min);
return 0;
}
使用VC6 编译没有错误,运行时弹出Debug Error 如果可以是不是能再说下malloc,calloc,free的正确用法
----------------------------------------------------------------------------------------------------------------
for语句后面加多了一个分号这个是一个语法错误 带式编译器发现不出来
malloc : 在程序预留的堆空间里开辟指定大小的内存(不把开辟内存的内容初始化为0),这块内存的生命周期是把这块内存释放之前,他的作用域是整一个程序,因为省去了初始化的时间,所以这个函数的等待时间要比calloc快,也就是说效率更高
calloc: 在程序预留的堆空间里开辟指定大小的内存(把开辟内存的内容初始化为0),这块内存的生命周期是把这块内存释放之前,他的作用域是整一个程序,因为要初始化内存,所以函数的效率比malloc要低
free : 释放已开辟的内存,当释放完后记得把指向内存的指针赋值为NULL,以免出现无效内存的访问。
如果你嫌弃直接调用malloc函数很麻烦,那你可以把他封装为一个宏:
#define MALLOC(t,n) (t*)malloc((n)*sizeof(t))
t 代表了数据的类型n代表了数据的个数。
原来我也是这个错误{:10_247:}
页:
[1]