使用new运算符的char **内存分配

时间:2012-12-11 19:41:45

标签: c++ memory pointers char allocation

我真的感到困惑,因为这会引发错误......

    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和删除。

请有人借我的手吗?

3 个答案:

答案 0 :(得分:2)

分配后你在做什么?您只分配了一个字符指针数组,没有为每个元素(指针)分配空间。如果您尝试在元素中存储项目,则会遇到问题。

例如,如果您想在分配后在结果[0]中存储任何内容,则还需要分配给它。例如:

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

如果没有分配,您不能只复制到结果[0]。这同样适用于任何结果元素。

答案 1 :(得分:1)

您正在为指针数组分配内存。之后,您必须为数组中的每个指针分配内存。我认为你的代码应该是这样的:

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

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

答案 2 :(得分:0)

如果使用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");
...