【发布时间】:2018-02-04 00:58:35
【问题描述】:
例如,如果我在 C 字符串上分配了更多的内存空间,那么有没有办法返回未使用的内存?还是自动完成?
char *x = malloc(256);
strcpy(x, "Hello World");
// return back unused x memory allocation
【问题讨论】:
-
@Arvnid!!!这在c 中不存在。如果在 c++ 中执行此操作,则会调用未定义的行为,因为在使用
new进行分配时会使用delete。在这种情况下,它会是x = new[256];,然后delete x;也是错误的,它会是delete[] x;。 -
BWT:
char *x = strdup("Hello World");或至少char *x = malloc(12); if (x != NULL) strcpy(x, "Hello World");。 -
如果你知道你将只使用 12 个字节,那么为什么不使用
malloc(12)而不是 256? -
完成@Pablo 的评论,你应该使用
malloc(),当你不知道要分配多少内存直到运行时。因此,当您知道时,您现在应该确切地了解多少。 -
@IharobAlAsimi 如果在编译时不知道内存空间怎么办?例如在用于用户输入或读取文件并处理未知字符串大小的程序中。