c - 你怎么知道用 malloc() 分配多少空间?

标签 c memory-management malloc char sizeof

我是一个 C 新手,我来自 C#。我一直在学习内存管理和 malloc() 函数。我也遇到过这段代码:

char *a_persons_name = malloc(sizeof(char) + 2);

我不明白这是为 a_persons_name 分配了多少空间。是分配 2 个字符(例如 AB)还是其他?

我也知道您有时可以通过 malloc 获得“幸运”并使用未分配的空间(这可能导致数据损坏和段错误)。那么我如何知道我分配了多少空间以及我需要多少空间?

最佳答案

该代码段为 2 个字符的名称分配了足够的空间。

通常,字符串缓冲区将从某个地方填充,即 I/O。如果事先不知道字符串的大小(例如从文件或键盘读取),通常使用以下三种方法之一:

  • 为任何给定的字符串定义最大大小,分配该大小 + 1(对于空终止符),最多读取该数量的字符,如果提供的字符过多则出错或盲目截断。不是非常用户友好。

  • 分阶段重新分配(最好使用几何级数,例如加倍,以避免二次行为),并继续阅读直到到达终点。编码不是很容易。

  • 分配一个固定的大小并希望它不会被超过,并且当这个假设失败时可怕地崩溃(或被拥有)。易于编码,易于破解。例如,请参阅标准 C 库中的 gets。 (切勿使用此功能。)

关于c - 你怎么知道用 malloc() 分配多少空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247964/

相关文章:

c - 指针和函数调用

ios - 如何实现发布方法?

c - 为什么调用 malloc() 没有区别?

c - 警报处理程序完成时出现 malloc 段错误

c - 使用strtod后如何将double值转换为char数组?在C中

python - 从 C 执行 python 脚本

c - const struct pointer 是否保证内存损坏/崩溃问题的安全性?

c - 释放传递给分配它的函数的指针

c - 当我尝试重新运行程序时,为什么此代码会产生 -10?

performance - Julia ,为什么函数内的循环会发生内存分配?