鱼C论坛

 找回密码
 立即注册
查看: 1628|回复: 3

[已解决]C语言动态内存分配

[复制链接]
发表于 2018-12-9 09:25:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:输入一个变量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[i]);
  max = p[0];
  min = p[0];
  for(i=0;i<N;i++)
  {
    average += p[i];
    if(p[i]>max)
      max = p[i];
    if(p[i]<min)
      min = p[i];
  }
  free(p);
  average /= N;
  printf("average = %.2f\nmax = %.2f\nmin = %.2f\n",average,max,min);
  return 0;
}
使用VC6        编译没有错误,运行时弹出Debug Error
最佳答案
2018-12-9 11:17:10
Inked7KMJ@Q]7P]MDP9ZS@PLFA14_LI.jpg
----------------------------------------------------------------------------------------------------------------
for语句后面加多了一个分号  这个是一个语法错误 带式编译器发现不出来

malloc : 在程序预留的堆空间里开辟指定大小的内存(不把开辟内存的内容初始化为0),这块内存的生命周期是把这块内存释放之前,他的作用域是整一个程序,因为省去了初始化的时间,所以这个函数的等待时间要比calloc快,也就是说效率更高

calloc: 在程序预留的堆空间里开辟指定大小的内存(把开辟内存的内容初始化为0),这块内存的生命周期是把这块内存释放之前,他的作用域是整一个程序,因为要初始化内存,所以函数的效率比malloc要低

free : 释放已开辟的内存,当释放完后记得把指向内存的指针赋值为NULL,以免出现无效内存的访问。

如果你嫌弃直接调用malloc函数很麻烦,那你可以把他封装为一个宏:

#define MALLOC(t,n) (t*)malloc((n)*sizeof(t))

t 代表了数据的类型  n代表了数据的个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-9 09:27:00 | 显示全部楼层
如果可以是不是能再说下malloc,calloc,free的正确用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 11:17:10 | 显示全部楼层    本楼为最佳答案   
Inked7KMJ@Q]7P]MDP9ZS@PLFA14_LI.jpg
----------------------------------------------------------------------------------------------------------------
for语句后面加多了一个分号  这个是一个语法错误 带式编译器发现不出来

malloc : 在程序预留的堆空间里开辟指定大小的内存(不把开辟内存的内容初始化为0),这块内存的生命周期是把这块内存释放之前,他的作用域是整一个程序,因为省去了初始化的时间,所以这个函数的等待时间要比calloc快,也就是说效率更高

calloc: 在程序预留的堆空间里开辟指定大小的内存(把开辟内存的内容初始化为0),这块内存的生命周期是把这块内存释放之前,他的作用域是整一个程序,因为要初始化内存,所以函数的效率比malloc要低

free : 释放已开辟的内存,当释放完后记得把指向内存的指针赋值为NULL,以免出现无效内存的访问。

如果你嫌弃直接调用malloc函数很麻烦,那你可以把他封装为一个宏:

#define MALLOC(t,n) (t*)malloc((n)*sizeof(t))

t 代表了数据的类型  n代表了数据的个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-14 13:42:41 | 显示全部楼层
原来我也是这个错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 17:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表