类的实例只允许1个方法或程序崩溃
Instance of class only allows 1 method, or program crashes
我正在学习类和OOP,所以我在做一些练习程序时,在编程时遇到了有史以来最奇怪的错误。
因此,我有以下文件,以我的类"pessoa"开头,位于pessoa.h:
#pragma once
#include <string>
#include <iostream>
using namespace std;
class pessoa {
public:
//constructor (nome do aluno, data de nascimento)
pessoa(string newname="asffaf", unsigned int newdate=1996): name(newname), DataN(newdate){};
void SetName(string a); //set name
void SetBornDate(unsigned int ); //nascimento
string GetName(); //get name
unsigned int GetBornDate();
virtual void Print(){}; // print
private:
string name; //nome
unsigned int DataN; //data de nascimento
};
其功能在pessoa.cpp 中定义
#include "pessoa.h"
string pessoa::GetName ()
{
return name;
}
void pessoa::SetName(string a)
{
name = a;
}
unsigned int pessoa::GetBornDate()
{
return DataN;
}
void pessoa::SetBornDate(unsigned int n)
{
DataN=n;
}
函数DoArray在DoArray.h中声明,并在文件DoArray.cpp:中定义
pessoa** DoArray(int n)
{
pessoa* p= new pessoa[n];
pessoa** pointer= &p;
return pointer;
}
主文件:
#include <string>
#include <iostream>
#include "pessoa.h"
#include "DoArray.h"
#include <cstdio>
using namespace std;
int main()
{
//pessoa P[10];
//cout << P[5].GetBornDate();
pessoa** a=DoArray(5);
cerr << endl << a[0][3].GetBornDate() << endl;
cerr << endl << a[0][3].GetName() << endl;
return 0;
}
奇怪的发现是,如果我对上面的一个方法"GetBornDate"或GetName进行注释并运行,则未注释的方法将正常运行。但是,如果两者都没有被注释,那么第一个方法将运行,程序将在第二个方法之前崩溃。
抱歉发了这么长的邮件。
让我们来看看这个函数:
int *get()
{
int i = 0;
return &i;
}
它有什么问题?它返回指向局部变量的指针,当函数get()
终止时,局部变量不再存在,即返回悬空指针。现在您的代码:
pessoa** DoArray(int n)
{
pessoa* p= new pessoa[n];
return &p;
}
你看到问题了吗?
进一步澄清:
typedef pessoa * pessoa_ptr;
pessoa_ptr* DoArray(int n)
{
pessoa_ptr p= whatever;
return &p;
}
您需要明白,无论您分配给p
什么都不会改变p
本身的生存期。指针与其他指针是相同的变量。
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- CoreCLR 中的检测探查器 - 将帮助程序程序集加载到 dotnet 进程的方法
- 是否可以从C++程序中调用 ACPI 方法?
- 将FFMpeg AVFrame对象从C++应用程序流式传输到Python的最佳方法?
- 在何处放置与类方法相关的帮助程序函数C++
- 初始化和终止Qt应用程序的正确方法?
- 有没有一种方法可以从本地C++程序写入在线CMS中的文件
- 在给定程序中降低矢量数组实现堆栈的时间复杂度有哪些不同的可能方法?
- 寻找更好的方法来编写这个程序 C++
- 消息分析程序继承的替代方法
- 如何将信号处理程序添加为方法
- 类指针方法崩溃程序
- 仅具有公共静态方法的帮助程序类
- cpp中rand()方法的bankend程序是什么?
- 在Visual Studio中编写独立程序的最佳方法是什么?
- 如何将程序从主发送到另一种方法
- 在所有程序中,在Visual Studio中添加OpENCV的一般方法是什么?
- 生成python绑定,要使用的方法/程序