课程创建和使用问题

时间:2017-03-21 12:04:21

标签: c++

我创建了一个表示此代码中描述的信息包的类:

#ifndef PACKET_H_
#define PACKET_H_

namespace std {

class Packet
{
public:
    Packet();

    virtual ~Packet();

    void initClass();

    void setStartP(char);
    void setAddFrom(char);
    void setAddTo(char);
    void setpDataSize(char);
    void setpNumber(char);
    void setChecksum(char);
    void setEndP(char);
    void LoadData(char);

    char getStartP();
    char getAddFrom();
    char getAddTo();
    char getpDataSize();
    char getChecksum();
    char getEndP();
    char getData();



private:
    char pB[261];
    char pDataMax;
    char pDataIndex;


};

} /* namespace std */

#endif /* PACKET_H_ */


#include "Packet.h"
#include <iostream>

namespace std {


Packet::Packet()
{

    pDataIndex = 0;
    initClass();
}

Packet::~Packet()
{
    delete this;
}

void Packet::setStartP(char startChar)
{

    pB[0] = startChar;
    cout << "in Set!";
}
void Packet::setAddFrom(char fromChar)
{

}
void Packet::setAddTo(char toChar)
{

}
void Packet::setpDataSize(char dataSizeChar)
{

}
void Packet::setpNumber(char packetNumber)
{

}
void Packet::setChecksum(char checksumChar)
{

}
void Packet::setEndP(char endChar)
{

}
void Packet::LoadData(char dataChar)
{


}

char Packet::getStartP()
{

    return pB[0];
    cout << "in Get";
}
char Packet::getAddFrom()
{
    return pB[1];
}
char Packet::getAddTo()
{
    return pB[2];
}
char Packet::getpDataSize()
{
    return pB[3];
}
char Packet::getChecksum()
{
    return pB[4];
}
char Packet::getEndP()
{
    return pB[260];
}

char Packet::getData()
{
    return pB[6 + pDataIndex];
}

void Packet::initClass()
{
    pDataMax = 254;
    pDataIndex = 0;

}

}

此时我只是测试它,所以我刚刚实现了两种方法。当我尝试运行程序时:

#include <iostream>
#include "Packet.h"


using namespace std;

Packet myPacket;

void buildPacket();

int main() {

    buildPacket();

    return 0;
}


void buildPacket( )
{
    char startP = 0x28;
    cout << "Setting startP!" << endl;
    myPacket.setStartP(startP);
    cout << "Getting startP" << endl;
    cout << myPacket.getStartP() << endl;
    cout << "Done";
}

代码很好,编译/构建时没有问题,它是一个运行时间。这真让我感到沮丧,它让我怀疑我对C ++中的类创建和使用的实际了解。 程序将运行到某一点,然后崩溃并显示一条Windows消息。在控制台上,这是崩溃之前得到的:

  

设置startP!   在Set!获取startP   (

我可以看到它似乎在删除它崩溃但不确定为什么。我环顾四周寻找类似的问题,但实际上找不到它为什么会出现这个问题的原因,我将非常感谢这方面的一些帮助。

1 个答案:

答案 0 :(得分:1)

不要在析构函数中调用delete this。该对象自动被破坏,因为它超出了范围,不需要delete

您可以在此处详细了解:http://en.cppreference.com/w/cpp/language/scope