我对C还是很陌生,并且正在尝试做我认为非常简单的事情-但由于某些原因而陷入困境:
我在一个名为main
的文件中有一个runnable.c
,其中:
#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);
还有{1>的
utils.c
我正在使用Windows计算机上进行编译
#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");
}
当我只有cl runnable.c utils.c /link /out:program.exe
和test_values
时,一切都很好-但是由于某些原因,当我将test_num_points
添加到组合中时,它无法成功运行。它仍然可以正确编译,但是没有任何输出。
我无法让调试器在Windows机器上运行,并且希望有人可以帮助我弄清楚发生了什么。
答案 0 :(得分:3)
堆栈大小通常很小,即只有几兆字节。因此,在将数组声明为局部变量时需要小心。
double ders[N*num_vars];
转换为double ders[100000*1];
,将使用800K字节(假设double
为8字节)。所以对于局部变量来说有点大。
您可以使用它声明static
关键字,也可以将其移出main(即,使其成为全局变量)。 static
和全局变量可以使用所有内存,因此它们可以比局部变量大得多。您还可以动态分配内存,例如使用malloc
或calloc
。