0

我正在研究的 malloc 示例是

#include <stdio.h>
#include <stdlib.h>
int main()
{
 int *vec;
 int i, size;
 printf("Give size of vector: ");
 scanf("%d",&size);
 vec = (int *) malloc(size * sizeof(int));
 for(i=0; i<size; i++) vec[i] = i;
 for(i=0; i<size; i++)
 printf("vec[%d]: %d\n", i, vec[i]);
 free(vec);
}

但是我可以让一个程序在运行时运行,就像这个程序在没有 malloc 的情况下用 C 语言编写它一样,不是吗?那么 malloc 在这里有什么用呢?

4

3 回答 3

4

它是动态内存分配。

非常重要的一点是,您不知道需要多少内存,因为最终必须使用的内存量取决于用户输入。

因此 malloc 的使用,它size作为其参数的一部分,并且size在编译时是未知的。

于 2013-05-25T17:21:55.220 回答
2

这个特定的示例可以使用标准支持的可变长度数组c99来完成,因为 2011 标准现在是可选的。尽管如果size非常大,将其分配到堆栈上将不起作用,因为堆栈比将使用的可用堆内存小得多malloc。我以前的这篇文章也有一些关于可变长度数组的链接,您可能会觉得有用。

在此示例之外,当您使用动态数据结构malloc时,很难避免。

于 2013-05-25T17:24:59.917 回答
1

两个问题:

首先,您可能直到运行时才知道需要多少内存。使用malloc()可以让您准确分配正确的数量:不多也不少。如果内存不足,您的应用程序可以优雅地“降级”。

其次,malloc()从堆中分配内存。这有时可能是一个优势。在堆栈上分配的局部变量的总内存量非常有限。静态变量意味着您的应用程序将一直使用所有内存,如果内存不足,这甚至可能会阻止您的应用程序加载。

于 2013-05-25T17:27:04.327 回答