c - 我不明白 malloc 函数
问题描述
int main (int argc, char** argv)
{
unsigned int i;
unsigned int *elements = malloc(2*sizeof(int));
unsigned long fibs[elements];
if (argc != 2){
printf("Usage: %s <# of elements>\n", argv[0]);
return 0;
}
compute_fibs (fibs, &elements);
for (i=0; i<elements; i++) {
printf ("fibs[%i]: %lu\n",i, fibs[i]);
}
printf("Displaying %u fibs\n", elements);
}
这是 main.c 文件
当我编译它得到错误
我想像 ./main 50 这样执行这个文件
并打印 50 个斐波那契值。
所以我想添加元素(在本例中为 50)
但不知何故我的 malloc() 功能不正确(?)
解决方案
unsigned int *elements = malloc(2*sizeof(int));
unsigned long fibs[elements];
您首先为 2 个整数分配空间。现在我不确定你想做什么,但下一行想要在 size 的堆栈上分配一个数组elements
,但elements
它是一个指向未初始化内存的指针。那不可能是(错误!)。
现在你测试if (argc != 2)
那么argv[1]
显然应该持有数字元素。然后您必须首先将其转换为 int,使用它来分配该数量的元素。然后你可以调用你的compute_fibs
函数。
所以可能你想要这样的东西:
int main (int argc, char** argv)
{
unsigned int i;
unsigned int elements;
unsigned long *fibs;
if (argc != 2){
printf("Usage: %s <# of elements>\n", argv[0]);
return 0;
}
elements= atoi(argv[1]);
fibs = malloc(elements*sizeof(*fibs)); // See Chux's comment
compute_fibs (fibs, elements);
for (i=0; i<elements; i++) {
printf ("fibs[%i]: %lu\n",i, fibs[i]);
}
printf("Displaying %u fibs\n", elements);
}
推荐阅读
- python - 我的线性回归模型不适合需要二维数组
- angular - 如何从Angular规范触发输入onchange
- java - 在 Spring Boot 中的 mockito 测试中的 if...else 语句问题
- c# - 带有格式数组的 DateTime.TryParseExact() 始终返回 false
- sql - 选择替换然后加入
- java - 如何使用 Mongo 存储库两次查询同一字段?
- c# - 用于验证多个值的 EF 数据注释
- java - 改造转换问题 - 如何为具体 JSON 正确创建 POJO 类:
- mysql - 在 save() 方法中从另一个模型动态创建模型
- firebase - Firebase:是否可以根据生成的“uid”重新验证匿名用户?