c - 将空数组传递给函数 - 不起作用
问题描述
我对 C 很陌生,并且正在尝试做我认为非常简单的事情 - 但由于某种原因被卡住了:
我有一个main
名为runnable.c
where I have:
#include <stdio.h>
#include <windows.h>
#include "utils.h"
#define N 100000
#define num_vars 1
int main() {
printf("I am running...\n");
double values[N*num_vars];
double ders[N*num_vars];
char variable[] = "params.txt";
read_file_to_array(variable, values); // fills up values
test_values(values);
test_num_points(N);
test_ders(ders);
return 0;
}
然后我有utils.h
哪个定义
void test_values(double values[]);
void test_ders(double ders[]);
void test_num_points(int num_points);
并且utils.c
有
#include <stdio.h>
void test_values(double values[]) {
printf("I am in test_values\n");
}
void test_num_points(int num_points) {
printf("I am in test_num_points\n");
}
void test_ders(double ders[]) {
printf("I am in test_ders\n");
}
我正在我的 Windows 机器上使用
cl runnable.c utils.c /link /out:program.exe
test_values
当我刚刚拥有并且时,一切都很好- 但是由于某种原因,当我添加到混合中test_num_points
时它没有成功运行。test_ders
它仍然可以正确编译,但没有输出任何内容。
我无法让调试器在我的 Windows 机器上工作,我希望有人能够帮助我弄清楚发生了什么。
解决方案
堆栈大小通常非常小,即只有几兆字节。因此,在将数组声明为局部变量时需要小心。
double ders[N*num_vars];
转换为double ders[100000*1];
并将使用 800K 字节(假设 adouble
为 8 字节)。所以这对于局部变量来说有点大。
您可以用它声明static
关键字,或将其移出 main (即使其成为全局变量)。static
并且全局变量可以使用所有内存,因此它们可以比局部变量大得多。您还可以动态分配内存,例如使用malloc
or calloc
。
推荐阅读
- amazon-web-services - Aws 将 Twitter 设置为用户池的身份提供者
- django - 如何修复未找到的未来 >= 0.15.2 发行版
- python - 从三重嵌套列表Python中获取最里面的元素
- python - 如何使用 Python 读取 Fortran 创建的整个二进制文件
- python - 在 python 中使用 time() 模块来查找是白天还是晚上
- mule - Mulesoft - 如何在异常对象中找到 Http 错误有效负载?
- graph - 在 Power BI 中更改 X 轴显示的值
- java - 计算青蛙到达河对岸所需的最少跳跃次数
- ios - 获取当前导航控制器的正确方法
- airflow - ETL 在不破坏 Catchup 的情况下呈现数据,没有计划间隔延迟