質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

1929閲覧

ポインターQueueに新しく構造体を追加したい

k1225

総合スコア21

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/10/14 17:22

編集2018/10/15 02:48

前提・実現したいこと

C++でqueue(dataフィールドと前後の構造体を指すpointerのフィールドが2つある)の後ろに新しい文字を含んだ構造体を追加したいのですが、以下のソースコードのerror exception!!のコメントがあるところに矢印が引っ張ってあり、以下のエラーメッセージが出て実行出来ません。ここでのエラーメッセージの意味と、具体的にコードの何を改善すれば良いのかアドバイスをお願いいたします。

発生している問題・エラーメッセージ

First-chance exception at 0x009D6016 in template.exe: 0xC0000005: Access violation writing location 0x0000001C. If there is a handler for this exception, the program may be safely continued.

該当のソースコード

header file

C++

1#include <string> //this allows you to declare and use strings 2#include <iostream> 3using namespace std; 4 5struct qNode 6{ 7 string data; 8 qNode* next; 9 qNode* previous; 10} ; 11 12class CBQueue 13{ public: 14 CBQueue(); 15 int getSize() const; 16 bool isEmpty() const; 17 void enqueue(string s); 18 void printF2B() const; 19 void printB2F() const; 20 string dequeue(); 21 void cut(string s); 22 string bail(); 23 void B2F(); 24 bool equals(CBQueue otherQ) const; 25 private: 26 qNode* temp; 27 qNode* front; 28 qNode* rear; 29 int size; 30} ; 31 32

cpp file

C++

1CBQueue::CBQueue() 2//preondition: none 3//postcondition: set is empty 4{ 5 front = NULL; 6 rear = NULL; 7 size = 0; 8} 9 10... 11 12void CBQueue::enqueue(string s) 13//preondition: none 14//postcondition: add a new structure containing string s to the rear of the queue 15{ 16 temp = new qNode; 17 temp->data = s; 18 temp->next = NULL; 19 20 if (size == 0) 21 { 22 front = rear = temp; 23 temp->previous = NULL; 24 } 25//ERROR EXCEPTION!! 26 else 27 { 28 rear->next = temp; // ERROR EXCEPTION!! 29 temp->previous = rear; 30 } 31 32 rear = temp; 33 size++; 34} 35

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Microsoft (macOS10.12.6 仮想環境)
Microsoft Visual Studio 2013

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwbQzhMkhhgEmhU

2018/10/14 21:13

メッセージとしてはデバッガで実行してるように見えるのですが、コンパイル出来ないとデバッグは出来ません。よく分かりません。
guest

回答2

0

実際に動かしてませんので外しているかもしれませんが、tempがメンバ変数で定義されているのが問題なんじゃないかと思います。
コードを見る限りtempに確保したqNodeのアドレスは別の変数に退避済みなので、ローカル変数として使い捨てにしたほうがすっきりするんじゃないでしょうか。

投稿2018/10/15 01:06

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Access violation writing location 0x0000001C.

不当アクセスです。
本来アクセスしてはいけない箇所に書き込みを行おうとしています
で、これは実行時エラーですよね?どこの行でこのエラーが出るんでしょうか。

投稿2018/10/15 00:43

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k1225

2018/10/15 02:46

回答ありがとうございます。 cppファイルの rear->next = temp; // ERROR EXCEPTION!! この行にエラーが出ます。
y_waiwai

2018/10/15 02:59 編集

rear にはNULLしか入りませんね ああ、これだと分かりづらいですね。 temp->rear には、NULLしか入りませんね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問