我真的感到困惑,因为这会引发错误......
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和删除。
请有人借我的手吗?
答案 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");
...