Пожалуйста, посмотрите на мой код ниже:Функция, возвращающая указатель на указатель
class SVMClassifier : public LibHAR
{
public:
...
//This is my function returning a pointer to pointer to svm_node structure
svm_node** SVMFeatureExtraction(SkeData* inputData, int* pFrameNum, int* pFeatureNum, double wt);
//This function calls SVMFeatureExtraction
virtual bool FeatureExtraction(SkeData* inputData, const double* dataLabels = NULL, int labelNum = 0); //This function calls SVMFeatureExtraction
...
private:
svm_node** SVMNodes;
int dataNum;
...
}
svm_node** SVMClassifier::SVMFeatureExtraction(SkeData* inputData, int* pFrameNum, int* pFeatureNum, double wt)
{
*pFeatureNum = FEATURENUM;
*pFrameNum = inputData->GetFrameSaved();
svm_node** pNodes = new svm_node*[*pFrameNum];
for (int i = 0; i < *pFrameNum; i++)
{
pNodes[i] = new svm_node[FEATURENUM + 1];
for (int j = 0; j < FEATURENUM/3; j++)
{
FEATURE_VEC* pVec = new FEATURE_VEC;
if (!CalFeatureVector(inputData, i+1, j+1, pVec, wt))
return NULL;
pNodes[i][j*3].index = j*3 + 1;
pNodes[i][j*3].value = pVec->x;
pNodes[i][j*3 + 1].index = j*3 + 2;
pNodes[i][j*3 + 1].value = pVec->y;
pNodes[i][j*3 + 2].index = j*3 + 3;
pNodes[i][j*3 + 2].value = pVec->z;
delete pVec;
}
pNodes[i][FEATURENUM].index = -1;
pNodes[i][FEATURENUM].value = 0;
}
return pNodes;
}
bool SVMClassifier::FeatureExtraction(SkeData* inputData, const double* dataLabels, int labelNum)
{
CleanNodes();
int n;
SVMNodes = SVMFeatureExtraction(inputData, &dataNum, &n, actWeight); //Error here!
...
}
Метод класса FeatureExtraction
вызывает другой метод SVMFeatureExtraction
который возвращает указатель на указатель. Я думаю, что память, указанная указателем, динамически выделяется в куче, так как она создается «new
». Но когда я отлаживал программу, адрес, возвращаемый SVMFeatureExtraction
, не может быть успешно присвоен SVMNodes
(SVMNodes всегда «NULL»), хотя содержимое pNodes
верное. Может ли кто-нибудь сказать мне, что не так с кодом?
спасибо.
Перед тем как вернуться из 'SVMFeatureExtraction', попробуйте напечатать литые значения int' pNodes', также напечатайте 'SVMFeatureExtraction (inputData, & dataNum, & n, actWeight)' без присвоения. –
Пара вопросов: Вы уверены, что 'inputData-> GetFrameSaved()' возвращает значение> 0? Кроме того, вы уверены, что это 'pNodes' выделяется в памяти внутри' SVMFeatureExtraction() ' – Tom
Ваша строка с ошибкой ссылается на переменную, которая не существует (dataNum). Это предназначено? –