首页 > 解决方案 > malloc 大小的一般建议

问题描述

我想知道如何做一些一般性的指导方针malloc。以下是使用以下函数的两种不同方法的示例:

split_strings_on_separator(char ** string_array_buffer, char *string, char *separator);
// for example: split_strings_on_separator(buffer, "big,word", ",");
// ==> ["big", "word", NULL];

我可以做到这一点的一种方法是malloc使用“足够大”的内存块,希望只要我有足够的内存,它可能不会产生太大的影响,所以我可以做类似的事情:

buffer = malloc(1000);

另一种方法会更精确,并且需要我计算缓冲区的确切大小。例如:

// separator and size
char * separator = ",";
size_t len_split_on = strlen(split_on);

// string and size
char * string = "big,word";
size_t len_string = strlen(string);

// exact_buffer_size = [sizeof pointer] x [num separator occurrences + 1 (array element exists after the last (or none) separator) + 1 (NULL at end)
malloc(exact_buffer_size);

一种方法是错误的,另一种是正确的,或者什么时候应该使用一种方法而不是另一种方法?使用第一种方法显然要容易得多,并且似乎更适合于琐碎大小的内存块(尽管这可能是一种懒惰/幼稚的思考方式)。

标签: c

解决方案


推荐阅读