鱼C论坛

 找回密码
 立即注册
查看: 5310|回复: 10

我认为是一个关于malloc函数的问题,求指导!!!

[复制链接]
发表于 2012-11-22 13:39:14 | 显示全部楼层 |阅读模式
10鱼币
  1. 我是看的小甲鱼的视频,想弄个函数做出POW函数的效果,
复制代码
先上源代码
  1. # include <stdio.h>
  2. # include <malloc.h>

  3. int pow(int x, int y);

  4. int main(void)
  5. {
  6.         int i;       

  7.         i = pow(2, 3);

  8.         printf("%f\n", i);

  9.         return 0;
  10. }

  11. int pow(int x, int y)
  12. {
  13.         int *p = (int *)malloc(sizeof(int)* y);
  14.         int z=1, i;

  15.         for (i=0; i<y; ++i)
  16.         {
  17.                 p[i] = x;
  18.                 z = z * p[i] ;
  19.         }

  20.         printf("%d\n", z);

  21.         free(p);p = NULL;

  22. return 0;
  23. }
复制代码
这是出错的图片

file:///C:/Users/Administrator/AppData/Roaming/Tencent/Users/312024054/QQ/WinTemp/RichOle/B)%60%25O@9O_8U$__FKKIMGA1V.jpg
经调试是在free出的错
但是我把它放在main函数里就不出错
  1. # include <stdio.h>
  2. # include <malloc.h>


  3. int main(void)
  4. {       
  5.         int x = 2, y = 3;

  6.         int *p = (int *)malloc(sizeof(int)* y);
  7.         int z=1, i;
  8.         //p = (int *)malloc(sizeof(int)*y);

  9.         for (i=0; i<y; ++i)
  10.         {
  11.                 p[i] = x;
  12.                 z = z * p[i] ;
  13.         }

  14.         printf("%d\n", z);

  15.         free(p);
  16.         p = NULL;

  17.         return 0;
  18. }
复制代码

现在是迷茫了,为什么会错在free??
求指点呀

最佳答案

查看完整内容

这个函数好乱啊。。。 你可以把int pow换成void pow,把return 0 删掉 或者 把pow里的printf删掉 return z; main里面写printf("%d",i); 其实这个不用malloc做起来更容易啊 = = 这里的malloc用起来和一个int 没什么区别
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-22 13:39:15 | 显示全部楼层
这个函数好乱啊。。。
你可以把int pow换成void pow,把return 0 删掉
或者 把pow里的printf删掉 return z;
main里面写printf("%d",i);

其实这个不用malloc做起来更容易啊 =  = 这里的malloc用起来和一个int 没什么区别
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-22 13:50:54 | 显示全部楼层
刚才把int改成double就行了,为什么呀??先上更改之后的代码
  1. # include <stdio.h>
  2. # include <malloc.h>

  3. double pow(double x, double y);

  4. int main(void)
  5. {
  6.         double i;       

  7.         i = pow(2, 3);

  8.         printf("%lf\n", i);

  9.         return 0;
  10. }

  11. double pow(double x, double y)
  12. {
  13.         double *p = (double *)malloc(sizeof(double)* y);
  14.         double z=1;
  15.         int i;

  16.         for (i=0; i<y; ++i)
  17.         {
  18.                 p[i] = x;
  19.                 z = z * p[i] ;
  20.         }
  21. free(p);

  22. p = NULL;
  23. return z;
  24. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-11-24 15:28:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-11-24 15:57:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-11-24 16:00:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-11-24 16:04:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-11-24 16:08:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-11-24 16:11:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-11-24 16:12:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-11-24 16:20:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-16 10:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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