簡體   English   中英

使用new運算符的char **內存分配

[英]char** memory allocation using new operator

我真的感到困惑,因為這會引發錯誤....

    char** results = new char*[numRes];  //this is where it breaks
    for(int i = 0; i < numRes; i++)  
    {  
         results[i] = new char[64];  
    }  

這會導致堆錯誤的破壞。 但肯定應該有用嗎? 我將4個char *分配給一個字符指針列表,這樣我就可以將它們傳遞給函數等。

我環顧四周,但他們似乎都在展示malloc和free ......我在課堂上使用它們,所以我想堅持使用c ++ new和delete。

有人可以借給我一只手嗎?

分配后你在做什么? 您只分配了一個字符指針數組,沒有為每個元素(指針)分配空間。 如果您嘗試在元素中存儲項目,則會遇到問題。

例如,如果您想在分配后在結果[0]中存儲任何內容,則還需要分配給它。 例如:

results[0] = new char[100]; // NEED TO ALLOCATE BEFORE WRITING TO results[0]!
strcpy(results[0], "Test");

如果沒有分配,您不能只復制到結果[0]。 任何結果元素都是如此。

您正在為指針數組分配內存。 之后,您必須為數組中的每個指針分配內存。 我認為你的代碼應該是這樣的:

    int numRes = 4;
    char** results = new char*[numRes];

    for(int i=0; i<numRes; i++)
    {
         results[i] = new char;
    }

如果使用c ++可以使用STL嗎? 你的代碼中特別是std :: string和std :: list或std :: vector類? 與傳統的c字符串不同,傳統的c字符串只是存儲器數組中的字符序列,C ++字符串對象屬於具有許多內置功能的類,以更直觀的方式使用字符串進行操作,並具有C ++容器常用的一些其他有用功能。

#include <string>
#include <list>

std::list<std::string> results; // create a list of strings

// and populate it
results.push_back("blah");
results.push_back("blah1");
results.push_back("blah2");
...

暫無
暫無

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

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