Я обнаружил, что структура (с массивом значений типа double и одним целым числом), определенная в отдельном Cpp-файле, но вызываемая из main, отправляет необоснованные значения в cout для массива.Ниже, как я надеюсь, приведен минимальный пример, вместе с выводом на консоль.
Мои извинения за то, что мой код зашифрован - я немного боролся за правильное форматирование.
I 'Буду благодарен, если кто-нибудь поможет мне понять и исправить это.
Бест, Джо
(1) main.cpp:
#include "iostream"
#include "defs.h"
using namespace std;
int main()
{
MyStruct myModel=ConstructModel();
cout << endl << "myModel goes first:" << endl;
for(int i=0; i<myModel.n; i++)
cout << "myModel.Y[" << i << "]=" << myModel.Y[i] << endl;
cout << "myModel.n=" << myModel.n << endl;
MyStruct myOtherModel;
myOtherModel.n=2; double Y[2]={0.1,0.1};
myOtherModel.Y=Y;
cout << endl << "now myOtherModel:" << endl;
for(int i=0; i<myModel.n; i++)
cout << "myOtherModel.Y[" << i << "]=" << myOtherModel.Y[i] << endl;
return 0;
}
(2) defs.cpp:
#include "defs.h"
MyStruct ConstructModel()
{
MyStruct Model;
double Y[2]={0.1,0.1}; Model.Y=Y;
int n=2; Model.n=n;
return Model;
}
(3) defs.h:
#ifndef DEFS_H
#define DEFS_H
struct MyStruct
{
double *Y;//length (n+1)
int n;
};
MyStruct ConstructModel();
#endif
Консольный вывод
На моей машине (WinXP 32bit, MSVC2008) это дает:
myModel идет первым:
myModel.Y [0] = 1.12947e-307
myModel.Y [1] = 1,80243e-307
myModel.n = 2
теперь myOtherModel:
myOtherModel.Y [0] = 0,1
myOtherModel.Y [1] = 0,1