簡體   English   中英

字符數組問題C ++

[英]Character arrays question C++

以下兩個摘要之間有什么區別? 一個是字符數組,另一個是字符數組指針,但是它們的行為相同,不是嗎?

范例1:

char * transport_layer_header;
// Memory allocation for char * - allocate memory for a 2 character string
char * transport_layer_header = (char *)malloc(2 * sizeof(char));
sprintf(transport_layer_header,"%d%d",1,2);

范例2:

char transport_layer_header[2];
sprintf(transport_layer_header,"%d%d",1,2);

是,有一點不同。 在第一個示例中,您在堆上動態分配了兩個元素的char數組。 在第二個示例中,您在堆棧上有一個本地的雙元素char數組。

在第一個示例中,由於您不free malloc返回的指針,因此還存在內存泄漏。

它們通常可以以相同的方式使用,例如,如您演示的那樣使用sprintf ,但是它們在本質上根本不同。

另一個區別是您的第一個示例將破壞堆上的數據,而第二個示例將破壞堆棧上的數據。 都沒有為尾隨\\ 0分配空間。

IMO最重要的區別是,在第二個選項中transport_layer_header是一個const指針(您不能使其指向其他位置),與第一個選項中的相同-您可以。

當然,這是先前答案的補充。

假設您糾正了“沒有空的空間”問題,即分配3個字節而不是2個字節,則通常僅在需要動態內存時才使用malloc()。 例如,如果您不知道數組的大小,則可以使用malloc。

如前所述,如果您使用malloc()並且以后不釋放內存,則可能會發生內存泄漏。

還有一點:您確實應該檢查malloc()的返回值以確保獲得了內存。 我知道在Solaris中,malloc()永遠不會失敗(認為它可能會休眠-這是一個很好的理由,如果您不希望進程進入休眠狀態,則不進行調用,如上所述)。 我假設在Linux上,malloc()可能會失敗(即,如果沒有足夠的可用內存)。 [如果我錯了,請糾正我。]

暫無
暫無

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

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