C:如果在运行时之前未知大小,我如何初始化全局数组?

Den*_*777 3 c arrays pointers initialization dynamic-memory-allocation

我正在用C(而不是C99)编写一些代码,我认为我需要几个全局数组.我从几个文本文件中获取数据,我还不知道它的大小,我需要存储这些值并以几种不同的方法提供它们.我已经编写了将文本文件读入数组的代码,但如果数组不是最佳选择,我相信我可以重写它.

如果你遇到过这种情况,你会怎么做?我不一定需要代码示例,只需要想法.

Ded*_*tor 6

使用动态分配:

int* pData;
char* pData2;

int main() {
    ...
    pData = malloc(count * sizeof *pData); // uninitialized
    pData2 = calloc(count, sizeof *pData2); // zero-initialized
    /* work on your arrays */
    free(pData);
    free(pData2);
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • @BasileStarynkevitch:这是如何解决问题的一个例子.它不是完整的,准备好生产代码. (5认同)

Sou*_*osh 5

首先,尝试理解要求.您不可能初始化"未知"大小的内存,只有在有一定数量的内存(以字节为单位)时才能初始化它.所以,首先要分配内存.

这是使用内存分配器函数malloc()和族的方案,它允许您在运行时分配给定大小的内存.定义一个指针,然后在运行时获取内存大小并使用allocator函数分配所需大小的内存.

那说,

  • calloc()将返回的内存初始化为0.
  • realloc() 用于在运行时重新调整内存大小.
  • 此外,在使用动态内存分配时,您应该小心使用内存来清理已分配free()的内存,以避免内存泄漏.