gpt4 book ai didi

c++ - 指向结构对象的指针作为函数的参数 - 打印时出现奇怪的文本

转载 作者:行者123 更新时间:2023-11-30 03:01:21 25 4
gpt4 key购买 nike

我有一个类,其中包含一个结构。我在类上有一个方法可以创建此结构的新对象,并将其作为指针返回。

我在这个类中有另一个方法,它接受一个指向这个结构的指针并打印出它的数据。

唯一的问题是,当我尝试打印出来时,控制台中出现了一些奇怪的文本。

代码示例(不是实际代码,而是它的原理):

// Header

class TestClass
{
public:

struct TestStruct
{
int ID;
string Name;
};

TestClass::TestStruct* CreateStruct(string name, int id);
void PrintStruct(TestClass:TestStruct* testStruct);
}

// C++ File

TestClass::TestStruct* TestClass::CreateStruct(string name, int id)
{

TestStruct testStruct;

testStruct.ID = id;
testStruct.Name = name;

TestClass::TestStruct *pStruct = &testStruct;

return pStruct;

};

void TestClass::PrintStruct(TestClass::TestStruct* testStruct)
{

cout << (testStruct)->ID << "\n";
cout << (testStruct)->Name << "\n";

};

int Main()
{

TestClass tClass;

tClass.PrintStruct(tClass.CreateStruct("A name", 1));

}

最佳答案

您正在返回一个指向局部变量的指针,并遇到了未定义的行为

TestClass::TestStruct* TestClass::CreateStruct(string name, int id)
{
TestStruct testStruct;
//...
TestClass::TestStruct *pStruct = &testStruct;
return pStruct;
} //testStruct is destroyed here
//the pointer pStruct is invalid

要让它工作,您可以返回一个智能指针或动态分配内存以延长对象的生命周期。请记住,您必须明确地删除它:

TestClass::TestStruct* TestClass::CreateStruct(string name, int id)
{

TestStruct* testStruct = new TestStruct;

testStruct->ID = id;
testStruct->Name = name;

return testStruct;

};

此外,请认真考虑您是否真的需要指点。尽可能使用自动变量。如果我是你,我会这样做:

TestClass::TestStruct TestClass::CreateStruct(string name, int id)
{

TestStruct testStruct;
testStruct.ID = id;
testStruct.Name = name;
return testStruct;
};

void TestClass::PrintStruct(const TestClass::TestStruct& testStruct) const
{
cout << testStruct.ID << "\n";
cout << testStruct.Name << "\n";
};

关于c++ - 指向结构对象的指针作为函数的参数 - 打印时出现奇怪的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11151688/

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