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:19 编辑
int *distribution(int *array,int member)
{
int someone;
for(int i =0; i<card; i++)
{
someone = array;
}
}
这个应该返回整型指针的函数没有返回值,没有看到动态分配内存的代码呀。 jackz007 发表于 2020-11-22 23:16
这个应该返回整型指针的函数没有返回值,没有看到动态分配内存的代码呀。
我傻掉了,老觉得自定义函数里面想要返回数组就要申请动态内存,是不是不用啊,用指针就可以?指针指向数组,定义指针函数,返回一个指向数组的指针就可以了 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-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() 进行释放。 这样的
#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;
}
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 ;
}
猪猪虾 发表于 2020-11-24 20:10
请问这里static申请静态变量怎么就可以了呢,
我这么写理论上没啥错啊
someone是在栈区开辟的内存, distribution 函数执行完, 该内存空间就会被释放掉, 返回局部变量, 会出现警告;
加static之后 存放在静态区,到程序结束, 才会被释放
页:
[1]