gpt4 book ai didi

c - 在 main 之外使用 malloc

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:51 26 4
gpt4 key购买 nike

我需要声明一个全局大数组。我尝试在 ouf main 中使用 malloc:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 200000

double *u_data = malloc(LENGTH * sizeof(double));
double *u_data_old = malloc(LENGTH * sizeof(double));
double *psi = malloc(LENGTH * sizeof(double));

void main(void){

free(u_data);
free(u_data_old);
free(psi);
}

但我收到此错误:初始化元素不是常量。有谁知道如何解决这个问题?

最佳答案

在 C 中,执行从 main 函数开始,在此之前没有运行动态全局初始化程序的机制(与 C++ 不同)。这意味着全局变量只能用编译时常量表达式来初始化,而不能用需要动态确定的值来初始化。

简单的答案是您的 malloc 调用应该转移到 main 函数中。

void * p;
int main() {
p = malloc(X);
// ...
free(p);
}

然而,这甚至可能不是必需的。如果你想要固定数量的空间,你可以简单地定义一个全局数组:

double data[HUGE];

int main() {
// ...
}

这个数组有静态存储期限(相对于局部变量的自动存储期限),静态存储几乎没有大小限制。实际上,全局对象的内存在程序加载时就已预留,它根本不是动态管理内存的一部分。

关于c - 在 main 之外使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com