gpt4 book ai didi

c++ - 在 main.cpp 以外的文件中定义的结构的奇怪之处

转载 作者:太空狗 更新时间:2023-10-29 23:27:06 25 4
gpt4 key购买 nike

我发现在一个单独的 Cpp 文件中定义了一个结构(带有一个 double 组和一个整数),但是从 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;
}

(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 32 位,MSVC2008),这给出了:

myModel 先行:

我的模型.Y[0]=1.12947e-307

我的模型.Y[1]=1.80243e-307

我的模型.n=2

现在我的其他模型:

我的其他模型.Y[0]=0.1

我的其他模型.Y[1]=0.1

最佳答案

您的结构包含一个指向 double 的裸指针。在 defs.cpp 中,您将其初始化为局部变量。 ConstructModel()范围外,那个内存不再有效。

如果你想在结构中使用数组,你必须声明它(包括它的大小,然后所有 MyStruct s 都必须相同)。但与其使用数组,不如使用例如std::list<double>std::vector<double>

关于c++ - 在 main.cpp 以外的文件中定义的结构的奇怪之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3280133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com