将空数组传递给函数-不起作用

时间:2019-06-18 22:31:57

标签: c

我对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);

还有{

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机器上运行,并且希望有人可以帮助我弄清楚发生了什么。

1 个答案:

答案 0 :(得分:3)

堆栈大小通常很小,即只有几兆字节。因此,在将数组声明为局部变量时需要小心。

double ders[N*num_vars];转换为double ders[100000*1];,将使用800K字节(假设double为8字节)。所以对于局部变量来说有点大。

您可以使用它声明static关键字,也可以将其移出main(即,使其成为全局变量)。 static和全局变量可以使用所有内存,因此它们可以比局部变量大得多。您还可以动态分配内存,例如使用malloccalloc