可能重复:
声明和 malloc 之间的区别
有什么区别:
char * a = malloc(size);
和
char a[size];
这个比那个好吗?使用malloc有什么好处吗?
您不控制堆栈分配内存的生命周期范围,它仅在范围内有效(除非您将其设为静态)。
malloc
用于在堆上分配内存。在您调用free
该内存之前,它是有效的。
在堆栈上分配内存更快,通常是因为您实际上并没有分配新内存,您只是保留了更多已经在使用的内存,但您无法控制生命周期,它由您的范围控制块或功能。
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()
因为这样可以避免增加内存碎片,并且堆栈操作可能比堆访问更快。