使用malloc将内存分配给struct指针并将struct指针指向struct的内存地址有什么区别?

时间:2016-10-14 11:09:51

标签: c pointers memory-management struct global-variables

这两段代码之间有什么区别?

// Structure
struct file {
    int fileSize;
};

int main(void) {
    // Variables
    struct file *pFile = (struct file*) malloc(sizeof(struct file)); // Declare pointer of type struct file and allocate enough room

    pFile->fileSize = 5;

    free(pFile);

    return 0;
}

// Structure
struct file {
    int fileSize;
} file1;

int main(void) {
    // Variables
    struct file *pFile = &file1; // Declare pointer of type struct file and point to file1 struct

    pFile->fileSize = 5;

    return 0;
}

这里有什么重要的东西吗?我想也许面值很明智,这些是相同的,但底层的内存分配是不同的?我只是无法把握它。

2 个答案:

答案 0 :(得分:1)

这里有几点不同:

  • 使用malloc,您可以多次重复调用,并为您的结构获取新的有效内存区域;只有一个静态分配的结构
  • 通过malloc获得的内存需要在最后释放;静态分配的内存不需要释放
  • 从翻译单元内的多个功能可以看到静态分配的结构;除非您明确地向它们传递指针,否则malloc的内存不会与其他函数共享。

答案 1 :(得分:0)

在您的第一个代码段pFile中指向动态分配的内存。

在第二个代码段中,pFile指向全局变量。

除了你自己需要free动态的(除此之外你还没有)之外,你与{{1}交互的方式在任何一种情况下,完全都是相同的。