首页 > 解决方案 > 将空数组传递给函数 - 不起作用

问题描述

我对 C 很陌生,并且正在尝试做我认为非常简单的事情 - 但由于某种原因被卡住了:

我有一个main名为runnable.cwhere 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 机器上工作,我希望有人能够帮助我弄清楚发生了什么。

标签: c

解决方案


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

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

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


推荐阅读