Witam,
Napisałem sobie prosty program pracujący na dynamicznie zaalokowanej tablicy. Niestety, przy bezpośrednim wywołaniu destruktora, program się wysypuje.
#include<iostream>
#include<math.h>
using namespace std;
class Window
{
public:
Window(int a, int b);
~Window();
char *tab;
void pisz(int a, int b, char c);
void display(void);
private:
int x, y;
};
Window::Window(int a, int b)
{
x = a;
y = b;
tab = new char[x*y];
for (int i = 0; i < x*y; i++) {
tab[i] = ' ';
}
}
Window::~Window()
{
delete[] tab;
}
void Window::pisz(int a, int b, char c) {
tab[a + (b*x)] = c;
}
void Window::display() {
for (int i = 0; i < x*y; i++) {
cout << tab[i];
if ((i%x)+1 == x) {
cout << endl;
}
}
}
int main() {
Window pole(70, 23);
for (int i = 0; i < 23; i++) {
pole.pisz(0, i, '|');
}
for (int i = 1; i < 70; i++) {
pole.pisz(i, 10, '-');
}
for (float i = 0; i < 12; i+=0.25) {
int ix = 5 * i;
int iy = sin(i)*10+10;
pole.pisz(ix, iy, '*');
}
pole.display();
// pole.~Window(); <----------- Linijka kodu, przez którą wysypuje się kod
system("pause");
}
Natomiast jeżeli w innym pliku zrobię tak:
#include <iostream>
int main() {
char *tab;
tab = new char[10];
delete [] tab;
return 0;
}
Wtedy nie ma żadnego problemu.
Bardzo proszę o pomoc.
PS: Prosił bym jeszcze, żeby ktoś mi wytłumaczył różnicę pomiędzy delete
a delete []
.
Window
(np będziesz chciał sobie to wrzucić do wektora) to pięknie Ci się wysypie :)