也许使用 calloc 更有意义 . 第一个参数是内存块中的元素数量(即大小为30 000的数组) . 第二个参数是一个块的大小(即数组中的一个元素) .
所以你会这样称呼它:
ptr = calloc(30000, sizeof(float));
在您的情况下使用 calloc 存在一个瓶颈,因为将内存清零可能需要一些时间 . 您可以使用 malloc 执行相同的操作,而是执行此操作,使 ptr 未初始化 .
ptr = malloc(30000 * sizeof(float));
另请don't cast calloc 或 malloc 的结果 .
EDIT: 由于您更改了问题以解决您首先要求的问题,因此您的代码还存在其他一些问题 . 从格式化问题开始,您应该在include指令后添加空格 . 你的原型也是不正确的,因为它说 func 可以接受任何数量的参数,因为它指定了一个带有未定义参数的函数,因此你应该使用关键字 void 代替:
#include
#include
float* func(void);
稍后在函数定义中,中间有星号,而原型中则是左边的星号 . 请保持一致 .
你的 array 声明是多余的,因为你从不使用它(至少你不应该因为你为动态数组分配内存) .
您在动态数组中设置数字的逻辑不起作用 . 您正尝试使用0到9之间的随机索引访问空的静态数组,这很可能会崩溃 . 我想你想要遍历动态数组的每个元素并分配0到9之间的随机整数,最后 random() 不是C中的函数;你想 rand() :
x=func(); // allocate memory for x
srand(time(NULL)); // set a random seed for psuedo-random functions
for(i=0;i<30000;i++) {
x[i] = rand() % 10; // assign a random number between 0 and 9.
}
在您分配内存的函数中,您将使用一个整数数组覆盖指向动态数组的指针,这会在以后尝试访问它时使程序崩溃,因为它没有分配给它的内存 . 您还可以使用 perror 替换 puts 错误消息,以获取有关分配失败原因的更多详细信息 .
ptr = malloc(30000 * sizeof(float));
if(ptr == NULL) {
perror("malloc failed");
// handle error
}else {
return ptr;
}