0

可能重复:
声明和 malloc 之间的区别

有什么区别:

char * a = malloc(size);  

char a[size];  

这个比那个好吗?使用malloc有什么好处吗?

4

2 回答 2

3

您不控制堆栈分配内存的生命周期范围,它仅在范围内有效(除非您将其设为静态)。

malloc用于在堆上分配内存。在您调用free该内存之前,它是有效的。

在堆栈上分配内存更快,通常是因为您实际上并没有分配新内存,您只是保留了更多已经在使用的内存,但您无法控制生命周期,它由您的范围控制块或功能。

于 2012-12-16T14:28:31.033 回答
2

char *a = malloc(size);和 char *a[size];` 有什么区别?

第一个声明一个指针char并在堆上为其分配size字节。第二个分配size指针char。它们不是等价的。

一个比另一个好吗?

不,它们有不同的用途。

使用有什么优势malloc()吗?

是的。如果你想从一个函数返回一个数组,你不能这样做:

char a[size];
return a;

因为 thena在返回后超出范围,并且使用它会导致未定义的行为。所以在这种情况下你必须使用

char *a = malloc(size);
return a;

(通常是这种情况,因为您可能希望每次从函数返回一个新字符串 - 但是,如果这不是必需的,您可以使用本地声明的静态数组。)

但是,如果仅在本地使用数组,则通常建议使用自动(堆栈)数组,而不是malloc()因为这样可以避免增加内存碎片,并且堆栈操作可能比堆访问更快。

于 2012-12-16T14:31:01.780 回答