[英]Allocating memory to a char* in C++
通過C ++代碼時,我碰到了一條線,開發人員試圖在該行中向char**
變量添加新的單元格。 這樣做時,下面是他用來為新單元分配內存的代碼行。
*(plantValue + (plantCount-1)) = (char *) malloc(sizeof(char) * SAPPlantStr.length());
其中plantValue
是char**
和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::vector
和std::string
而不是擁有原始char*
指針。 這些C ++類自動管理它們自己的內存,並大大簡化了代碼。
PS還要注意,C風格的字符串是NUL終止的,因此,當使用malloc()
為新字符串分配內存時,在計算總長度時也應考慮終止NUL(換句話說,您應該具有SAPPlantStr.length() + 1
您的代碼中的SAPPlantStr.length() + 1
)。
plantValue [plantCount-1]包含一個指向具有SAPPlantStr長度的已分配內存的指針
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.