先ほども別に質問をし回答をいただいたのですが、その後の直しがうまくいきません。
汎用クラスを使い動的にメモリを確保したいのですが、解放の仕方が出来ません。
★で囲まれた部分をそのままコンパイルすると、char型クラスのオブジェクトを作成した際に下にあるようにエラーが起きます。
ans11n4.cpp:78: instantiated from here
ans11n4.cpp:29: error: incompatible types in assignment of ‘long int’ to ‘char [2]’
ans11n4.cpp:31: error: incompatible types in assignment of ‘long int’ to ‘char [10][2]’
char型にint型の0を代入しようとしているからエラーが出るのは分かりました。
★で囲まれた部分を消してコンパイルすると、コンパイルは通りますが、実行後デストラクタが呼ばれた後にSegmentation fault (core dumped)となります。
解決方法を教えていただけないでしょうか。
c++
1#include <iostream> 2#include <vector> 3using namespace std; 4 5#define SIZE 10 6 7// 汎用stackクラスを作成する 8template <class StackType> class stack { 9 StackType stck[SIZE][2]; // スタックの領域を確保する 10 int tos; // スタックの先頭を索引 11public: 12 stack() // コンストラクタ 13 { 14 /* new */ 15 // StackType*の配列を動的生成 16 StackType **stck = new StackType*[SIZE]; 17 // 配列の各要素でStackTypeの配列を動的生成 18 stck[tos] = new StackType[2]; 19 } 20 ~stack() // デストラクタ 21 { 22cout << "デストラクタが呼ばれた\n"; 23 /* delete */ 24 // 各要素を先にdelete 25 delete[] stck[tos]; 26 ★stck[tos] = NULL;★ 27 delete[] stck; 28 ★stck = NULL;★ 29 } 30 void init() { tos = 0; } // スタックを初期化する 31 void push(StackType ob, StackType ob2); // スタックにオブジェクトをプッシュする 32 StackType pop(StackType &ob2); // スタックにオブジェクトをポップする 33}; 34 35
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/21 12:08