鱼C论坛

 找回密码
 立即注册
查看: 925|回复: 7

[已解决]malloc动态申请内存,显示Invailed conversion from int to int*

[复制链接]
发表于 2020-11-22 23:01:27 | 显示全部楼层 |阅读模式

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

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

x
目的:随机生成54个0~54不重复的54个数,给3个人平均分配14个数
·16行报错
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int card = 14;
  5. int *distribution(int *array,int member);

  6. int main()
  7. {
  8.         int people[54],*person1,*person2,*person3;
  9.        
  10.         for(int i =0;i<54;i++)
  11.         {
  12.                 people[i] = rand() % 54;
  13.         }
  14.        
  15.         person1 = *distribution(people,1);
  16.         person2 = *distribution(people,2);
  17.         person3 = *distribution(people,3);
  18.        
  19. }

  20. int *distribution(int *array,int member)
  21. {
  22.         int someone[14];
  23.         for(int i =0; i<card; i++)
  24.         {
  25.                 someone[i] = array[card * (member-1) + i];
  26.         }
  27. }
复制代码
最佳答案
2020-11-23 17:49:06
这样的
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int card = 14;
int *distribution(int *array,int member);

int main()
{
        int people[54],*person1,*person2,*person3;

        for(int i =0;i<54;i++)
        {
                people[i] = rand() % 54;
        }

        person1 = distribution(people,1);
        person2 = distribution(people,2);
        person3 = distribution(people,3);
       

}

int *distribution(int *array,int member)
{
        static int someone[14];
        for(int i =0; i<card; i++)
        {
                someone[i] = array[card * (member-1) + i];
        }
        return someone;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-22 23:16:13 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-22 23:19 编辑
  1. int *distribution(int *array,int member)
  2. {
  3.         int someone[14];
  4.         for(int i =0; i<card; i++)
  5.         {
  6.                 someone[i] = array[card * (member-1) + i];
  7.         }
  8. }
复制代码

       这个应该返回整型指针的函数没有返回值,没有看到动态分配内存的代码呀。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 23:23:16 | 显示全部楼层
jackz007 发表于 2020-11-22 23:16
这个应该返回整型指针的函数没有返回值,没有看到动态分配内存的代码呀。

我傻掉了,老觉得自定义函数里面想要返回数组就要申请动态内存,是不是不用啊,用指针就可以?指针指向数组,定义指针函数,返回一个指向数组的指针就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 23:24:04 | 显示全部楼层
jackz007 发表于 2020-11-22 23:16
这个应该返回整型指针的函数没有返回值,没有看到动态分配内存的代码呀。

我就是想在自定义函数里面返回那个数组,怎么实现呢
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int card = 14;
  5. int *distribution(int *array,int member);

  6. int main()
  7. {
  8.         int people[54],*person1,*person2,*person3;
  9.        
  10.         for(int i =0;i<54;i++)
  11.         {
  12.                 people[i] = rand() % 54;
  13.         }
  14.        
  15.         person1 = *distribution(people,1);
  16.         person2 = *distribution(people,2);
  17.         person3 = *distribution(people,3);
  18.        
  19. }

  20. int *distribution(int *array,int member)
  21. {
  22.         int someone[14];
  23.         for(int i =0; i<card; i++)
  24.         {
  25.                 someone[i] = array[card * (member-1) + i];
  26.         }
  27.         return someone;
  28. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 23:49:32 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-23 00:10 编辑
猪猪虾 发表于 2020-11-22 23:24
我就是想在自定义函数里面返回那个数组,怎么实现呢


        任何函数都不可以返回自己的局部变量,除非变量占用的内存是由调用参数传入的或者是通过 malloc() 动态分配的,你目前的这种用法是错误的,因为 someone[] 是 distribution() 的局部变量,变量占用的内存在调用函数的时候临时分配得到,在退出函数的过程中这些内存会立即被释放,不再受到任何保护,所存储的内容会即时失控。
        你的函数这样写是可以的,你可以试一试
  1. int * distribution(int *array,int member)
  2. {
  3.         int * someone                                       ;
  4.         someone = (int *) malloc(sizeof(int) * 14)          ;
  5.         for(int i = 0 ; i < card ; i ++)
  6.         {
  7.                 someone[i] = array[card * (member - 1) + i] ;
  8.         }
  9.         return someone                                      ;
  10. }
复制代码

        通过 malloc() 分配得到的内存会在程序中一直得到保留,直到用 free() 进行释放。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 17:49:06 | 显示全部楼层    本楼为最佳答案   
这样的
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int card = 14;
int *distribution(int *array,int member);

int main()
{
        int people[54],*person1,*person2,*person3;

        for(int i =0;i<54;i++)
        {
                people[i] = rand() % 54;
        }

        person1 = distribution(people,1);
        person2 = distribution(people,2);
        person3 = distribution(people,3);
       

}

int *distribution(int *array,int member)
{
        static int someone[14];
        for(int i =0; i<card; i++)
        {
                someone[i] = array[card * (member-1) + i];
        }
        return someone;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-24 20:10:36 | 显示全部楼层
youxiaoyaooo 发表于 2020-11-23 17:49
这样的
#include
#include


请问这里static申请静态变量怎么就可以了呢,
我这么写理论上没啥错啊

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. //**************************************************************************
  6. //生成54个随机数 ,按顺序,将这54个数字存储到3个数组里面,每个数组存放14个随机数
  7. int number_of_game = 3;
  8. int card = 14;
  9. int *distribution(int array,int member);

  10. int main()
  11. {
  12.         int people[54],*person1,*person2,*person3;
  13.       
  14.         for(int i =0;i<54;i++)
  15.         {
  16.                 people[i] = rand() % 54;
  17.         }
  18.       
  19.         person1 = *distribution(people,1);
  20.         person2 = *distribution(people,2);
  21.         person3 = *distribution(people,3);
  22.       
  23. }

  24. int * distribution(int *array,int member)
  25. {
  26.         int * someone                                       ;
  27.         someone = (int *) malloc(sizeof(int) * 14)          ;
  28.         for(int i = 0 ; i < card ; i ++)
  29.         {
  30.                 someone[i] = array[card * (member - 1) + i] ;
  31.         }
  32.         return someone                                      ;
  33. }
  34.   

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-27 18:49:25 | 显示全部楼层
猪猪虾 发表于 2020-11-24 20:10
请问这里static申请静态变量怎么就可以了呢,
我这么写理论上没啥错啊

someone是在栈区开辟的内存, distribution 函数执行完, 该内存空间就会被释放掉, 返回局部变量, 会出现警告;
加static之后 存放在静态区,到程序结束, 才会被释放
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 10:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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