猪猪虾 发表于 2020-11-22 23:01:27

malloc动态申请内存,显示Invailed conversion from int to int*

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

int main()
{
        int people,*person1,*person2,*person3;
       
        for(int i =0;i<54;i++)
        {
                people = rand() % 54;
        }
       
        person1 = *distribution(people,1);
        person2 = *distribution(people,2);
        person3 = *distribution(people,3);
       
}

int *distribution(int *array,int member)
{
        int someone;
        for(int i =0; i<card; i++)
        {
                someone = array;
        }
}

jackz007 发表于 2020-11-22 23:16:13

本帖最后由 jackz007 于 2020-11-22 23:19 编辑

int *distribution(int *array,int member)
{
      int someone;
      for(int i =0; i<card; i++)
      {
                someone = array;
      }
}
       这个应该返回整型指针的函数没有返回值,没有看到动态分配内存的代码呀。

猪猪虾 发表于 2020-11-22 23:23:16

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

我傻掉了,老觉得自定义函数里面想要返回数组就要申请动态内存,是不是不用啊,用指针就可以?指针指向数组,定义指针函数,返回一个指向数组的指针就可以了

猪猪虾 发表于 2020-11-22 23:24:04

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

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

int main()
{
        int people,*person1,*person2,*person3;
       
        for(int i =0;i<54;i++)
        {
                people = rand() % 54;
        }
       
        person1 = *distribution(people,1);
        person2 = *distribution(people,2);
        person3 = *distribution(people,3);
       
}

int *distribution(int *array,int member)
{
        int someone;
        for(int i =0; i<card; i++)
        {
                someone = array;
        }
        return someone;
}

jackz007 发表于 2020-11-22 23:49:32

本帖最后由 jackz007 于 2020-11-23 00:10 编辑

猪猪虾 发表于 2020-11-22 23:24
我就是想在自定义函数里面返回那个数组,怎么实现呢

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

youxiaoyaooo 发表于 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,*person1,*person2,*person3;

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

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

}

int *distribution(int *array,int member)
{
        static int someone;
        for(int i =0; i<card; i++)
        {
                someone = array;
        }
        return someone;
}

猪猪虾 发表于 2020-11-24 20:10:36

youxiaoyaooo 发表于 2020-11-23 17:49
这样的
#include
#include


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

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

int main()
{
      int people,*person1,*person2,*person3;
      
      for(int i =0;i<54;i++)
      {
                people = rand() % 54;
      }
      
      person1 = *distribution(people,1);
      person2 = *distribution(people,2);
      person3 = *distribution(people,3);
      
}

int * distribution(int *array,int member)
{
      int * someone                                       ;
      someone = (int *) malloc(sizeof(int) * 14)          ;
      for(int i = 0 ; i < card ; i ++)
      {
                someone = array ;
      }
      return someone                                    ;
}


youxiaoyaooo 发表于 2020-11-27 18:49:25

猪猪虾 发表于 2020-11-24 20:10
请问这里static申请静态变量怎么就可以了呢,
我这么写理论上没啥错啊

someone是在栈区开辟的内存, distribution 函数执行完, 该内存空间就会被释放掉, 返回局部变量, 会出现警告;
加static之后 存放在静态区,到程序结束, 才会被释放
页: [1]
查看完整版本: malloc动态申请内存,显示Invailed conversion from int to int*