java动态分配数组大小_如何为长度为30,000的单维数组动态分配内存?

也许使用 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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值