【发布时间】:2015-11-02 16:07:13
【问题描述】:
我是一名学生,正在准备下周的 C 动态内存分配测试。我正在查看旧的测试问题,并且遇到了一个问题:
编写一个 C 程序,动态创建一个长度为 30,000 的单维数组,并用 0 到 9 的随机数初始化该数组。
我对如何创建随机数并将它们放入一个数组有深刻的理解,但我对我的 malloc 语句以及如何在其中放置除“sizeof”代码之外的数字感到困惑。例如,我有这个为浮点分配内存的代码:
#include<stdio.h>
#include<stdlib.h>
float* func();
int main(void)
{
int i;
float* x;
float array[0];
x=func();
srand(time(NULL));
i=random()%10;
array[i];
}
float * func(void)
{
float z;
float* ptr;
ptr = malloc(30000 * sizeof(float));
if(ptr == NULL)
{
puts("ALLOCATION FAILED.\n");
}else{
ptr = &z;
return ptr;
}
}
我的问题是如何为长度为 30,000 的单维数组动态分配内存?这种分配对于现实世界的软件开发工作有什么用处?
【问题讨论】:
-
在 C 中你应该 not cast the result of
malloc(或其他返回void *的函数)。 -
至于你的问题,你再想想。如果
malloc(sizeof(float))分配了一个float,你怎么能把它改成分配两个呢?也许像malloc(sizeof(float) + sizeof(float))这样的东西?这怎么能概括为分配 N 个元素? -
刚刚注意到你完全改变了你的问题。回滚到以前的状态。您不得更改问题的核心,因为这会删除答案的上下文。如果您有什么要补充的,只需在原始问题上附加适当的注释和新信息即可。
标签: c arrays memory memory-management