Я действительно сбит с толку этой ошибкой ….
char** results = new char*[numRes]; //this is where it breaks
for(int i = 0; i < numRes; i++)
{
results[i] = new char[64];
}
Это приводит к искажению ошибки кучи. но наверняка это должно работать? Я назначаю 4 символа * списку указателей символов, чтобы я мог передавать их в функции и т. Д.
Я смотрел вокруг везде, но все они, кажется, показывают 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 ++.
#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");
...