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

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

新規登録して質問してみよう
ただいま回答率
86.12%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

メモリリーク

メモリリークは、プログラムファイルがメモリの解放に失敗した時に起こります。

C++

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

解決済

「malloc.c : 2329: sysmalloc: Assertion」 実行エラーの原因が知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

メモリリーク

メモリリークは、プログラムファイルがメモリの解放に失敗した時に起こります。

C++

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

2回答

0リアクション

0クリップ

2057閲覧

投稿2021/09/14 09:45

編集2021/09/14 11:20

#質問内容
文章をコピー出来なかったので画像ですいません。以下の画像ですがなぜ「malloc.c : 2329: sysmalloc: Assertion」エラーが発生するのでしょうか? 提示コードですがEntryクラスのコンストラクタのChangeScene()関数でstd::make_unique<Edit>();コードで発生しているのですがそのEditクラスは問題ありませんでした。つまりstd::make_unique<Edit>();が原因なのですがなぜエラーが出るのでしょうか?
※C++ 14を使っています。

std::make_unique<Edit>();
$ make g++ -c -MMD -MP source/Edit.cpp -o obj/Edit.o In file included from /usr/include/c++/9/memory:80, from source/../header/Edit.hpp:5, from source/Edit.cpp:5: /usr/include/c++/9/bits/unique_ptr.h: In instantiation of ‘void std::default_delete<_Tp>::operator()(_Tp*) const [with _Tp = Screen]’: /usr/include/c++/9/bits/unique_ptr.h:292:17: required from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = Screen; _Dp = std::default_delete<Screen>]’ source/Edit.cpp:9:22: required from here /usr/include/c++/9/bits/unique_ptr.h:79:16: error: invalid application of ‘sizeof’ to incomplete type ‘Screen’ 79 | static_assert(sizeof(_Tp)>0, | ^~~~~~~~~~~ make: *** [Makefile:11: obj/Edit.o] エラー 1

イメージ説明

#include <stdlib.h> #include <iostream> #include <memory> #include "../header/Edit.hpp" #include "../header/Color.hpp" #include "../header/Log.hpp" // ######################## コンストラクタ ######################## Edit::Edit(): Scene() { mousePosition.x = 0; mousePosition.y = 0; int t = 1; for(int i = 0; i < 8; i++) { for(int j = 0; j<8; j++) { init_pair(t, i, j); t++; } } //screen = std::make_unique<Screen>(); //前景 changeScene = Scene::SceneType::Edit; //現在のシーン } // ######################## Keyboard Input ######################## void Edit::KeyInput() { int key = getch(); //ESCで終了 if(key == 27) { changeScene = Scene::SceneType::Exit; } } // ######################## Mouse Input ######################## void Edit::MouseInput() { //マウスイベント if(getmouse(&event) == OK) { //マウス座標 if(event.bstate & REPORT_MOUSE_POSITION) { mousePosition.x = event.x; mousePosition.y = event.y; } //Left click if(event.bstate & BUTTON1_PRESSED) { } //Right click if(event.bstate & BUTTON3_PRESSED) { } } erase(); move(mousePosition.y,mousePosition.x); //screen->Renderer(); refresh(); } //コンストラクタ Edit::~Edit() { }
#include "../header/Entry.hpp" #include <memory> //コンストラクタ Entry::Entry(): Scene() { nowScene = Scene::SceneType::Edit; //初期シーン ChangeScene(); //シーン推移 } void Entry::ChangeScene() { switch(nowScene) { case Scene::SceneType::Edit: { edit = std::make_unique<Edit>(); } break; //終了 case Scene::SceneType::Exit: { changeScene = Scene::SceneType::Exit; } break; } } //計算 void Entry::Update() { //changeScene = Scene::SceneType::Exit; edit->Update(); if(nowScene != edit->getChangeScene()) { std::cout<<(int)edit->getChangeScene()<<std::endl; //std::cout<<(int)nowScene<<std::endl; nowScene = edit->getChangeScene(); ChangeScene(); } } //描画 void Entry::Renderer()const { if(nowScene == Scene::SceneType::Edit) { edit->Renderer(); } } //デストラクタ Entry::~Entry() { }

makefile

PRG :=AAEditor SRCDIR :=source OUTDIR :=obj DEP :=obj/%.d SRC := $(wildcard $(SRCDIR)/*.cpp) OBJ := $(addprefix $(OUTDIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) $(PRG): $(OBJ) $(CXX) -std=c++14 $^ -l ncurses -o $@ $(OUTDIR)/%.o: source/%.cpp $(CXX) -c -MMD -MP $^ -o $@ -include $(DEP) clean: rm -f ./obj/*.o *.out ./obj/*.d *.a $(PRG)
#include <stdlib.h> #include <iostream> //#include <memory> #include "../header/Edit.hpp" #include "../lib/ncurses/include/curses.h" // ######################## コンストラクタ ######################## Edit::Edit() : Scene() { mousePosition.x = 0; mousePosition.y = 0; int t = 1; for(int i = 0; i < 8; i++) { for(int j = 0; j<8; j++) { init_pair(t, i, j); t++; } } // screen = std::make_unique<Screen>(); //前景 //changeScene = Scene::SceneType::Edit; //現在のシーン } // ######################## Keyboard Input ######################## void Edit::KeyInput() { int key = getch(); //ESCで終了 if(key == 27) { // changeScene = Scene::SceneType::Exit; } } // ######################## Update ######################## void Edit::Update() { MouseInput(); KeyInput(); } // ######################## Renderer ######################## void Edit::Renderer()const { } // ######################## Mouse Input ######################## void Edit::MouseInput() { //マウスイベント if(getmouse(&event) == OK) { //マウス座標 if(event.bstate & REPORT_MOUSE_POSITION) { mousePosition.x = event.x; mousePosition.y = event.y; } //Left click if(event.bstate & BUTTON1_PRESSED) { } //Right click if(event.bstate & BUTTON3_PRESSED) { } } erase(); move(mousePosition.y,mousePosition.x); //screen->Renderer(); refresh(); } //デストラクタ Edit::~Edit() { }
#ifndef __ENTRY_HPP_ #define __ENTRY_HPP_ #include <iostream> #include "Scene.hpp" #include <memory> class Edit; class Entry : public Scene { public: Entry(); //コンストラクタ ~Entry(); //デストラクタ void Update(); //計算 void Renderer()const; //描画 void ChangeScene(); //シーン推移 private: std::unique_ptr<Edit> edit; Scene::SceneType nowScene; //現在のシーン }; #endif

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

episteme

2021/09/14 10:56

Edit.hpp みせて。
episteme

2021/09/14 10:59

実行エラーってなに? 実行時エラーのこと? コンパイルでエラー吐いてるから実行できないはずじゃ?
退会済みユーザー

退会済みユーザー

2021/09/14 11:07

提示文章を修正しました
episteme

2021/09/14 11:18

リンクエラーですか? コンパイルでエラー吐いてるからリンクできないはずじゃ?
退会済みユーザー

退会済みユーザー

2021/09/14 11:19

そうなのですが修正します
episteme

2021/09/14 11:22

で、そのメッセージは何したときに出たエラーなんですか?
退会済みユーザー

退会済みユーザー

2021/09/14 11:25

起動した瞬間なんですけど追跡したっけかこれらのクラスが関係しています
episteme

2021/09/14 11:26

なにを起動したんですか?
退会済みユーザー

退会済みユーザー

2021/09/14 11:27

普通にその今作ってるソフトです。
episteme

2021/09/14 11:29 編集

いやだから、コンパイルに失敗してるんだからそのソフトはできていないんでしょ? なんで実行できるんですか?
退会済みユーザー

退会済みユーザー

2021/09/14 11:33

そうですよ
退会済みユーザー

退会済みユーザー

2021/09/14 11:33

実行できません
episteme

2021/09/14 11:35

できてないのに「起動した瞬間...」とは?
退会済みユーザー

退会済みユーザー

2021/09/14 11:39

makeをクリーンしたらエラーになりました
episteme

2021/09/14 11:40

...ごめん、問題が理解できない。パス。
int32_t

2021/09/14 23:33

libcのmallocが実行時にヒープ破壊を検出して停止したのでしょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

メモリリーク

メモリリークは、プログラムファイルがメモリの解放に失敗した時に起こります。

C++

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