c - 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);
一种方法是错误的,另一种是正确的,或者什么时候应该使用一种方法而不是另一种方法?使用第一种方法显然要容易得多,并且似乎更适合于琐碎大小的内存块(尽管这可能是一种懒惰/幼稚的思考方式)。
解决方案
推荐阅读
- java - Vuejs 和 quarkus 开发部署
- vba - VBA 代码 - 调用宏并停止运行,直到某些行
- vue.js - 使用axios未定义的vuex“url”
- javascript - 如何将输入值传递给其他函数?
- python - 使用“hue”和“style”变量配置 Seaborn relplot 图例
- java - 按时间段自动删除索引日志 ElasticSearch
- reactjs - 如何在 Visual Studio Code 中为组件标签添加颜色?
- amazon-web-services - 将 MS 公司门户安装到 Amazon Workspace 以使其符合安全性
- antd - 如何将redux-saga的数据管理与request field ant design pro table一起使用?
- linux - 将大型数组写入内存 x86 程序集 - 使用堆栈空间的段错误