KnightRaven
KnightRaven

Reputation: 11

std::vector in MyClass ptr causing crash on destructor

I have a problem in regards to a custom class I have made. The original intention was to create a particle emitter and in this emitter are two vectors to hold colors and the particles themselves.

The problem exactly is trying to destruct this custom class which functions perfectly if you do not call the destructor, which is obviously bad.

I have reduced this to a very short, compileable example.

Test.h

#include <vector>
class Test{
public:
    Test();
    ~Test();
protected:
    std::vector<int> Ints;
};

And the main.cpp:

#include "Test.h"
int main(int argc, char **argv){
    Test* t;
    delete[] t;
    return 0;
}

In the Implementation file is just empty constructor and destructors.

Something to note is, this only happens when the "Test" is a pointer, which would preferred to be avoided.

Will provide more information if needed. Thanks in advance.

Upvotes: 0

Views: 61

Answers (3)

user1840643
user1840643

Reputation: 21

You are not creating object Test. You have created an pointer of type Test. For a pointer you need to use the keyword "new".

Test * t = new Test();

Upvotes: 0

sfjac
sfjac

Reputation: 7294

If t is a pointer then you need to give it something to point to first, as @P0W points out. But why not just declare t to be a local (stack) variable?

#include "Test.h"
int main(int argc, char **argv){
    Test t;
    return 0;
}

Upvotes: 1

P0W
P0W

Reputation: 47784

You are deleting something that hasn't allocated a memory and that too in wrong way.

Allocate memory first

Test *t = new Test;

then,

delete t; // Note no []

Also, since C++11 is tagged, prefer using smart pointers, which do the memory management for you on its own

Upvotes: 2

Related Questions