将内存分配给 C++ 中的字符*

Allocating memory to a char* in C++

本文关键字:字符 C++ 内存 分配      更新时间:2023-10-16

在浏览C++代码时,我遇到了一行,开发人员正在尝试向char**变量添加新单元格。在执行此操作时,下面是他用于为新单元分配内存的代码行。

*(plantValue + (plantCount-1)) = (char *) malloc(sizeof(char) * SAPPlantStr.length());

其中plantValuechar**plantCount是整数。

有人可以解释一下上面的代码行,因为我无法理解它。

提前谢谢。

看起来代码中的plantValue是指向原始 C 样式字符串的指针数组的指针,即:

+----------+
plantValue --> |  char *  | --> String #1
(char **)      +----------+
|  char *  | --> String #2
+----------+
|   ...    |
+----------+
|  char *  | --> String #N
+----------+

因此,该代码基本上是使用malloc()分配一个新的 C 样式字符串,并将指向它的指针存储在上面表示的char*向量的插槽中。

特别是,plantCount-1是预分配指针数组中第一个可用插槽的索引;plantValue + (plantCount-1)指向该槽,*(plantValue + (plantCount-1)) = ...写入该槽中malloc()返回的字符串指针。

请注意,上面的代码比C++更像C;例如,C++中,您将使用new[]而不是malloc()进行显式动态内存分配;但是,更好的是,在C++中,您应该使用标准容器类,如std::vectorstd::string,而不是原始char*拥有指针。这些C++类会自动管理自己的内存,并大大简化您的代码。

附言另请注意,C 样式字符串以 NUL 结尾,因此当您使用malloc()为新字符串分配内存时,在计算长度时还应考虑终止 NULL(换句话说,您应该在代码中SAPPlantStr.length() + 1(。

plantValue[plantCount-1] 包含一个指向长度为 SAPPlantStr 的已分配内存的指针