
#include <stdio.h>
#include <vector>
#include "SanaeStr.h"
int main(void){
std::vector<sanae::str> test;
test.add("hello");
printf("%s",test[0].c_str());
}
sanae::strのコード(github):
https://github.com/ubproject/Useful-headers/blob …
168行目のsfree()でブレークポイントが発生しましたって出てしまいました。
sfree関数は
#define sfree(d){free(d);d=NULL;}
ってやってあるので同じポインタにfreeをしないようにしてあるのですがなってしまって
訳が分かりません。
(メモリの内容を見るとfreeされているからNULLになってるはずがなぜかNULLになっていない。)
色々つけ足しながら作ってたのでごちゃごちゃしてますがやさしめに教えていただけると嬉しいです。
No.1ベストアンサー
- 回答日時:
もうちょっと具体的に詳細を書いてくれませんか?
どんなソフトで作って実行しているのですか?
「ブレークポイントが発生しました」の前後に何かかいてないですか?
・std::vectorの要素としてクラスを指定する場合、コピーコンストラクタまたはムーブコンストラクタが必要となってきます。
定義してない場合はデフォルトのものが使われます。
デフォルトのコンストラクタで「浅いコピー」で作られたために、複数のstrインスタンスで、同じアドレスを示すstを持ってしまい、それぞれがfreeしようとして最初のだけ成功する、というのはありそうです。
・直接は関係ないかもしれませんが、正直読み難いです。
mallocのサイズ計算を間違えていないか?とも思っているのですが
(少なくとも char* str1 = (char*)malloc(sizeof(char*) * position); 等は、結果オーライなだけで、正しくはありません)
mallocやfreeがあちらこちらに散らかっていて確認し辛いです。
メソッドにまとめるとかしましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
空ENTERの判別
-
なぜ、C++の標準ヘッダをインク...
-
enumの値から定義名を文字列化...
-
c++のvirtual関数および継承に...
-
std::map の const 修飾について
-
Haru PDF Library
-
JPEGやPNGが読めるLoadImage関数
-
VxWorks 6.4ソケット接続につい...
-
PICでダイナミック点灯 なぜか...
-
switch文のエラーについて
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
最早開始時間と最遅完了時刻を...
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
値差の%計算方法について
-
数字以外が入力されたらエラー...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
C++でShowCursorを使いたい。
-
enumの値から定義名を文字列化...
-
空ENTERの判別
-
VxWorks 6.4ソケット接続につい...
-
C++で、テキストファイルを一行...
-
switch文のエラーについて
-
_tcscat がうまくいきません(V...
-
C言語からgnuplot呼び出し
-
C言語のエラーを修正したい
-
std::map の const 修飾について
-
なぜ、C++の標準ヘッダをインク...
-
vc++の使い方について
-
gccでコンパイル時のエラー
-
このプログラミング誰か教えて...
-
STLでポインタのリストをsort()...
-
構造体配列のvectorへの変換と...
-
#defineの使い方について
-
#define中の#のエスケープ
-
リモートデスクトップの接続元I...
おすすめ情報