@ Адам Розенфилд получил правильный ответ, как и некоторые другие (удалите этот амперсанд), но в качестве пищи для размышлений хороший способ сделать это - использовать std :: vector (of std :: vectors) передать его в функцию в качестве ссылочного параметра.
#include <vector>
void Classifier::classify(std::vector<std::vector<unsigned char>> & chars)
{
//construct a vector of W*3 integers with value 0
//NB ( this gets destroyed when it goes out of scope )
std::vector<unsigned char> v(W*3,0);
//push a copy of this vector to the one you passed in - H times.
for(int i = 0; i < H; i++)
chars.push_back(v);
}
chars
заполняется необходимым содержимым, и когда дело доходит до удаления vector
, вам не нужно беспокоиться о том, как вызвать правильный синтаксис delete[]
, как при этих двух вызовах new
в вашем 2D массиве.
Вы можете ссылаться на элементы в этом векторе, как если бы вы использовали 2D-массив, например chars[5][2]
или что угодно.
хотя я вижу, что ты хочешь быть в состоянии пойти:
unsigned char** someData = classify();
Итак, если вы хотите использовать векторы, вам нужно объявить someData следующим образом:
std::vector<std::vector<unsigned char>> someData;
и, чтобы сделать это более ясным, возможно:
typedef std::vector<std::vector<unsigned char>> vector2D;
vector2D someData;
classify(someData);
...