1

我真的对这个抛出错误感到困惑......

    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。

有人可以帮帮我吗?

4

3 回答 3

2

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

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

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

您不能只复制到 results[0] 而不进行分配。这同样适用于任何结果元素。

于 2012-12-11T19:44:13.537 回答
1

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

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

    for(int i=0; i<numRes; i++)
    {
         results[i] = new char;
    }
于 2012-12-11T19:51:35.750 回答
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");
...
于 2012-12-11T20:36:00.383 回答