我发现在一个单独的Cpp文件中定义了一个结构(带有一个双精度数组和一个整数数组),但是从main调用的结果将不合理的值发送给cout用于数组.下面我希望是最小的例子,以及控制台输出.
我的道歉应该是我的代码被扰乱 - 我一直在努力格式化它.
如果有人能帮助我理解并纠正这一点,我将不胜感激.
最好,乔
(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;
}
Run Code Online (Sandbox Code Playgroud)
(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;
}
Run Code Online (Sandbox Code Playgroud)
(3)defs.h:
#ifndef DEFS_H
#define DEFS_H
struct MyStruct
{
double *Y;//length (n+1)
int n;
};
MyStruct ConstructModel();
#endif
Run Code Online (Sandbox Code Playgroud)
控制台输出
在我的机器上(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
Pon*_*gge 10
你的struct包含一个指向双精度的裸指针.在defs.cpp中,您将其初始化为局部变量.超出范围ConstructModel(),该内存不再有效.
如果你想在一个结构中使用一个数组,你必须声明它(包括它的大小,然后必须对所有MyStructs 都相同).但是,为什么不使用eg std::list<double>或std::vector<double>?而不是使用数组?
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |