2015-12-09 4 views
-2

Я пытаюсь передать аргумент массива в C++. Такие коды.Передача аргументов array error

main() 
{ 

...   
double *terms = new double[9]; 
GuassianTerms(9,1,terms); 

< термины не имеют правильные значения при здесь>

...} 


double Cmfc_test5Dlg::Guassian(int x, double sigma) 
{ 
     double c = 2.0 * sigma * sigma; 
     return exp(-x * x/c)/sqrt(c * 3.141592f); 
} 
double Cmfc_test5Dlg::GuassianTerms(int kernalSize, double sigma, double terms[]) 
{ 
     terms = new double[kernalSize]; 
     for (int i = 0; i < kernalSize; ++i) { 
       terms[i] = Guassian(i - kernalSize/2, sigma); 
     } 
     return 1;//*terms; 
} 

Но термины имеют что-то неправильные значения.

Как получить аргумент прихода за проход?

Что мне делать для решения этой проблемы?

+2

Почему вы выполняете 'terms = new double [kernalSize];' в 'GuassianTerms'? – NathanOliver

+0

термины имеют тип double *, поэтому передавайте его как двойные * термины. Кроме того, этот способ приведет к утечке памяти, поскольку вы уже выделили термины в основном. Либо не выделяйте их снова, либо сначала очистите память. – prkist

+0

Я новичок. поэтому я не знаю, с чего начать. – bural

ответ

1
double Cmfc_test5Dlg::GuassianTerms(int kernalSize, double sigma, double* terms) 
{ 
     for (int i = 0; i < kernalSize; ++i) { 
       terms[i] = Guassian(i - kernalSize/2, sigma); 
     } 
     return 1;//*terms; 
} 
+1

Пожалуйста, добавьте несколько комментариев, чтобы объяснить, что не так/почему вы предлагаете свой ответ ... –

+0

Спасибо, я получил его ;. и я решил с вашим ответом. Спасибо – bural

+0

Изменение из 'double []' to 'double *' в списке параметров в основном косметическое. Термины синтаксически эквивалентны, но поскольку он фактически является указателем, который передается, я предпочитаю «double *» как предоставление лучшей информации читателям. Изменение, которое имело реальную разницу, заключалось в удалении 'terms = new double [kernalSize];' из 'GaussianTerms()'. Массив уже был выделен в вызывающем коде, и наличие оператора в вызываемой функции приводит к путанице и утечкам памяти, а также к неправильным результатам. – vacuumhead

Смежные вопросы