c - 我不需要 malloc() 这个数组吗?

标签 c arrays struct malloc dynamic-memory-allocation

我正在努力学习 malloc()/free() 的 C 语言规则。考虑下面的代码,它运行得很好。 (在 Linux 上,使用 GCC 编译。)具体来说,我想知道 arr 数组。我知道你必须为数组的所有结构元素分配内存...但你为什么不必为数组分配内存 本身

#include<stdio.h>
#include<stdlib.h>
#define ARR_SIZE 100

typedef struct containerStruct{
    int data1;
    int data2;
    int data3;
    // ...etc...
} container;

int main(){

    container* arr[ARR_SIZE];       // Don't I have to malloc this?

    int i;
    for(i=0; i<ARR_SIZE; i++){
            arr[i] = (container*) malloc (sizeof(container));   // I get why I have to malloc() here
    }

    ...do stuff...

    for(i=0; i<ARR_SIZE; i++){
            free(arr[i]);        // I get why I have to free() here
    }

    // Don't I have to free(arr) ?
    return 0;
}

我猜 container* arr[ARR_SIZE]; 行告诉编译器它需要知道的所有信息,以便在内存中为数组开辟空间,这就是这段代码起作用的原因。

但不知何故,它仍然“感觉”不对。当我 malloc() 某些东西时,我在堆上保留内存空间,对吗?但是我的 container* arr[ARR_SIZE]; 调用在堆栈上创建了数组。所以......容器*搬运工数组存在于堆栈中,所有这些容器*指针都指向堆上的容器结构。对吗?

最佳答案

arr 声明的正下方,您有以下内容:

int i;

它保留了足够的空间(可能在“堆栈”上) 来存储int。您是否也“感觉”不对?

arr 的声明没有什么不同。编译器为 container *ARR_SIZE 元素数组分配足够的空间(可能在“堆栈”上)

关于c - 我不需要 malloc() 这个数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40635071/

相关文章:

c - 你如何使用非选项参数的 getopt()

c - 我是否正确地使用 cURL 模拟 CORS?我是否需要实现 OPTIONS 请求

arrays - 算法 - 在未排序的数组中找到具有最小距离的两个数字的最大总和

arrays - 如何处理BehaviorSubjects、Observables中的嵌套数组/对象?

c# - 从结构体的 ArrayList 获取参数

c++ - 仅在 C++ 中读取和写入整数类型的结构不起作用

有人可以告诉我这是如何工作的吗? (C 编程)

c - 从 ELF 二进制文件中仅提取我的函数名称

c++ - 模板类的专门成员 - 不匹配 - 数组

c++ - 在数组中搜索字符串