簡體   English   中英

在C ++中將內存分配給char *

[英]Allocating memory to a char* in C++

通過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 ++類自動管理它們自己的內存,並大大簡化了代碼。

PS還要注意,C風格的字符串是NUL終止的,因此,當使用malloc()為新字符串分配內存時,在計算長度時也應考慮終止NUL(換句話說,您應該具有SAPPlantStr.length() + 1您的代碼中的SAPPlantStr.length() + 1 )。

plantValue [plantCount-1]包含一個指向具有SAPPlantStr長度的已分配內存的指針

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM