fjの時代から10年以上に渡るmalloc/free問題について語ってください(^q^)
前スレ
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/
探検
mallocの後にfree不要と言うバカいるの?Part2
■ このスレッドは過去ログ倉庫に格納されています
2013/01/30(水) 21:38:37.44
630デフォルトの名無しさん
2015/07/04(土) 09:05:53.85ID:5JPjTv/9 >>629
いや、わざわざ釣りは要らんから。
いや、わざわざ釣りは要らんから。
631デフォルトの名無しさん
2015/07/04(土) 12:39:12.23ID:eIcp7urH これはGCやスマートポインタに対する警告文だろね。
632デフォルトの名無しさん
2015/07/04(土) 13:31:46.55ID:WvwJxr10 安全側に振って思考停止する奴がCなんか使うんじゃねぇ
という主張なら理解できなくもない
という主張なら理解できなくもない
633NAS6 ◆n3AmnVhjwc
2015/07/05(日) 19:06:31.29ID:v9UjDf+H グローバルスコープの配列で出来ないことは動的確保だけだけど
free()でメモリ節約の意図がないならば
プログラム仕様上の最大容量でグローバルスコープ配列確保で全て済むよ
free()でメモリ節約の意図がないならば
プログラム仕様上の最大容量でグローバルスコープ配列確保で全て済むよ
634デフォルトの名無しさん
2015/07/06(月) 08:25:50.04ID:UtQpsrfy データ量が多くてスワップするほどメモリを使ってしまうのと、僅かなデータの為にスワップするほどメモリを確保するのでは話が違うけどね。
635デフォルトの名無しさん
2015/08/25(火) 21:39:50.35ID:bwlYR2I5 何々全部配列でするの?
オブジェクトをnewしてポインタで管理したりしないの?
HSPみたいだね
オブジェクトをnewしてポインタで管理したりしないの?
HSPみたいだね
636NAS6 ◆n3AmnVhjwc
2015/08/25(火) 23:59:50.17ID:WwLbMRpa void hoge(){
・・・
p=malloc(10);
・・・pにゃむにゃむ、freeはしない
}
void main(){
hoge();
}
なんてのは
type p[10];
void hoge(){
・・・pにゃむにゃむ
}
void main(){
hoge();
}
こっちのほうがいいよ
freeやdeleteをちゃんと使わないコードがダメなだけだよ
スマートポインタを作りたいんなら
template<typename T>class A{
T* m_p;
A(int n){m_p=new T[n];}
~A(){if(m_p){delete[] m_p;m_p=null;}}
・・・にゃむにゃむ
}
コンパイル通してないからあれだけどこんなかんじに
コンストラクタとデストラクタをやっとけよ
・・・
p=malloc(10);
・・・pにゃむにゃむ、freeはしない
}
void main(){
hoge();
}
なんてのは
type p[10];
void hoge(){
・・・pにゃむにゃむ
}
void main(){
hoge();
}
こっちのほうがいいよ
freeやdeleteをちゃんと使わないコードがダメなだけだよ
スマートポインタを作りたいんなら
template<typename T>class A{
T* m_p;
A(int n){m_p=new T[n];}
~A(){if(m_p){delete[] m_p;m_p=null;}}
・・・にゃむにゃむ
}
コンパイル通してないからあれだけどこんなかんじに
コンストラクタとデストラクタをやっとけよ
637デフォルトの名無しさん
2015/08/26(水) 00:36:58.00ID:5P6ATqZc はいバカ
沢山のオブジェクトを配列で管理とか
沢山のオブジェクトを配列で管理とか
638NAS6 ◆n3AmnVhjwc
2015/08/26(水) 01:01:42.59ID:soKtzAZv #include <iostream>
using namespace std;
#define TEST
template<typename T>class A {
public:
T* m_p;
int m_size;
A() {
m_p = nullptr;
m_size = 0;
#ifdef TEST
cout << "コンストラクタ A"<<endl;
#endif
}
A(int n) :A() { m_p = new T[n]; m_size = n; }
~A() {
if (m_p != nullptr) { delete[] m_p; m_p = nullptr; m_size = 0; }
#ifdef TEST
cout << "デストラクタ A" << endl;
#endif
}
};
using namespace std;
#define TEST
template<typename T>class A {
public:
T* m_p;
int m_size;
A() {
m_p = nullptr;
m_size = 0;
#ifdef TEST
cout << "コンストラクタ A"<<endl;
#endif
}
A(int n) :A() { m_p = new T[n]; m_size = n; }
~A() {
if (m_p != nullptr) { delete[] m_p; m_p = nullptr; m_size = 0; }
#ifdef TEST
cout << "デストラクタ A" << endl;
#endif
}
};
639NAS6 ◆n3AmnVhjwc
2015/08/26(水) 01:02:10.89ID:soKtzAZv void dispAint(A<int> &a) {
int i;
for (i = 0; i < a.m_size; i++) cout << a.m_p[i] << endl;
}
void main() {
int i;
{ A<int> a(10);
for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
dispAint(a); }
i = 1;//ブレークポイント設定
return;
}
delete使わないのがダメなだけだよ
スマートポインタを作りたいならこう書く
int i;
for (i = 0; i < a.m_size; i++) cout << a.m_p[i] << endl;
}
void main() {
int i;
{ A<int> a(10);
for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
dispAint(a); }
i = 1;//ブレークポイント設定
return;
}
delete使わないのがダメなだけだよ
スマートポインタを作りたいならこう書く
640NAS6 ◆n3AmnVhjwc
2015/08/26(水) 01:26:51.26ID:soKtzAZv void A::resize(int n) {
int i;
int m = (n < m_size ? n : m_size);
T* tmp=new T[n];
for (i = 0; i < m; i++) tmp[i] = m_p[i];
delete[] m_p;
m_p = tmp;
m_size = n;
}
クラスAのリサイズをするんならこんな感じ
int i;
int m = (n < m_size ? n : m_size);
T* tmp=new T[n];
for (i = 0; i < m; i++) tmp[i] = m_p[i];
delete[] m_p;
m_p = tmp;
m_size = n;
}
クラスAのリサイズをするんならこんな感じ
641デフォルトの名無しさん
2015/08/26(水) 01:28:22.08ID:5P6ATqZc これのどこがスマートポインタwww
バカ決定じゃねーか
バカ決定じゃねーか
642NAS6 ◆n3AmnVhjwc
2015/08/26(水) 01:33:34.47ID:soKtzAZv ああ、こうだった
void A::resize(int n) {
int i;
int m = (n < m_size ? n : m_size);
T* tmp=new T[n];
if (m_p != nullptr) {
for (i = 0; i < m; i++) tmp[i] = m_p[i];
delete[] m_p;
}
m_p = tmp;
m_size = n;
}
void A::resize(int n) {
int i;
int m = (n < m_size ? n : m_size);
T* tmp=new T[n];
if (m_p != nullptr) {
for (i = 0; i < m; i++) tmp[i] = m_p[i];
delete[] m_p;
}
m_p = tmp;
m_size = n;
}
643NAS6 ◆n3AmnVhjwc
2015/08/26(水) 01:44:03.88ID:soKtzAZv >>641
どこが?って、そのまんまだよ
{ A<int> a(10);
for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
resize(5);
dispAint(a); }
メモリの確保と破棄をこのスコープで自動的にやるよ
利用は参照渡しじゃないとデストラクタが複数回呼ばれちゃうけどな
どこが?って、そのまんまだよ
{ A<int> a(10);
for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
resize(5);
dispAint(a); }
メモリの確保と破棄をこのスコープで自動的にやるよ
利用は参照渡しじゃないとデストラクタが複数回呼ばれちゃうけどな
644NAS6 ◆n3AmnVhjwc
2015/08/26(水) 01:45:51.99ID:soKtzAZv ミス
{ A<int> a(10);
for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
a.resize(5);
dispAint(a); }
{ A<int> a(10);
for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
a.resize(5);
dispAint(a); }
645デフォルトの名無しさん
2015/08/26(水) 01:57:13.25ID:KP8nmGdk だからそれのどこがスマートポインタなの?
まだ気づかないの?本物のバカだ
まだ気づかないの?本物のバカだ
646NAS6 ◆n3AmnVhjwc
2015/08/26(水) 02:17:33.32ID:soKtzAZv 所有権エラーが嫌ならthisポインタを保存すればいいだけのこと
ポインタとしての構文動作がしたいなら->()なり、*()なり
オペレータオーバーロードすりゃあいいだろ
#include <iostream>
using namespace std;
#define TEST
template<typename T>class A {
public:
T* m_p;
A* m_owner;
int m_size;
A() {
m_owner = this;
m_p = nullptr;
m_size = 0;
#ifdef TEST
cout << "コンストラクタ A"<<endl;
#endif
}
A(int n) :A() { m_p = new T[n]; m_size = n; }
~A() {
if (m_owner == this && m_p != nullptr) {
delete[] m_p; m_p = nullptr; m_size = 0;
#ifdef TEST
cout << "デストラクタ A" << endl;
#endif
}
}
つづき
ポインタとしての構文動作がしたいなら->()なり、*()なり
オペレータオーバーロードすりゃあいいだろ
#include <iostream>
using namespace std;
#define TEST
template<typename T>class A {
public:
T* m_p;
A* m_owner;
int m_size;
A() {
m_owner = this;
m_p = nullptr;
m_size = 0;
#ifdef TEST
cout << "コンストラクタ A"<<endl;
#endif
}
A(int n) :A() { m_p = new T[n]; m_size = n; }
~A() {
if (m_owner == this && m_p != nullptr) {
delete[] m_p; m_p = nullptr; m_size = 0;
#ifdef TEST
cout << "デストラクタ A" << endl;
#endif
}
}
つづき
647NAS6 ◆n3AmnVhjwc
2015/08/26(水) 02:19:36.57ID:soKtzAZv つづき
void resize(int n) {
int i;
int m = (n < m_size ? n : m_size);
T* tmp=new T[n];
if (m_owner == this && m_p != nullptr) {
for (i = 0; i < m; i++) tmp[i] = m_p[i];
delete[] m_p;
}
m_p = tmp;
m_size = n;
}
};
void dispAint(A<int> a) {
int i;
for (i = 0; i < a.m_size; i++) cout << a.m_p[i] << endl;
}
void main() {
int i;
{
A<int> a(10);
for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
a.resize(5);
dispAint(a);
}
i = 1;//ブレークポイント設定
return;
}
void resize(int n) {
int i;
int m = (n < m_size ? n : m_size);
T* tmp=new T[n];
if (m_owner == this && m_p != nullptr) {
for (i = 0; i < m; i++) tmp[i] = m_p[i];
delete[] m_p;
}
m_p = tmp;
m_size = n;
}
};
void dispAint(A<int> a) {
int i;
for (i = 0; i < a.m_size; i++) cout << a.m_p[i] << endl;
}
void main() {
int i;
{
A<int> a(10);
for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
a.resize(5);
dispAint(a);
}
i = 1;//ブレークポイント設定
return;
}
648デフォルトの名無しさん
2015/08/26(水) 02:24:15.81ID:KP8nmGdk で、これが「スマートポインタ」なわけ?
649NAS6 ◆n3AmnVhjwc
2015/08/26(水) 02:29:19.01ID:soKtzAZv ポインタとしての構文動作がしたいなら->()なり、*()なり
オペレーターオーバーロードすりゃあいいだろ
オペレーターオーバーロードすりゃあいいだろ
650NAS6 ◆n3AmnVhjwc
2015/08/26(水) 06:56:12.48ID:soKtzAZv ttp://nas6.main.jp/sptr.cpp
スマートポインタで実装したい動作で↑で足りないものはないとおもう
スマートポインタで実装したい動作で↑で足りないものはないとおもう
651NAS6 ◆n3AmnVhjwc
2015/08/26(水) 07:00:39.49ID:soKtzAZv あとはoperator ->(???)の定義の仕方がよくわからん
652NAS6 ◆n3AmnVhjwc
2015/08/26(水) 10:50:48.63ID:soKtzAZv operator ->()もできた
653デフォルトの名無しさん
2015/08/26(水) 10:51:56.19ID:m0f/YXG1 ここまで指摘してあげているのに、
何でスマートポインタで検索して調べないの?
だから君はダメなんだよ
君の書いてるのは、コンテナ、で、スマートポインタ、ではない
はい、答え
バカは黙ってstd::vector使っとけ
何でスマートポインタで検索して調べないの?
だから君はダメなんだよ
君の書いてるのは、コンテナ、で、スマートポインタ、ではない
はい、答え
バカは黙ってstd::vector使っとけ
654デフォルトの名無しさん
2015/08/26(水) 12:36:46.52ID:tnAoTvL3 auto_ptr
scoped_ptr
shared_ptr
weak_ptr
scoped_ptr
shared_ptr
weak_ptr
655NAS6 ◆n3AmnVhjwc
2015/08/26(水) 15:07:52.81ID:soKtzAZv ttp://nas6.main.jp/sptr.cpp
コンストラクタが気に入らないみたいだから、よりポインタに近くしたぞ
コンストラクタが気に入らないみたいだから、よりポインタに近くしたぞ
656デフォルトの名無しさん
2015/08/26(水) 15:40:45.94ID:eIiWuCWx ひでえなあ…値全部コピーしてるだけで全然ポインタじゃない
しかも所有権管理全然できてないから、
コピーコンストラクタで渡すと移動せず不正アクセス
まだauto_ptrのがマシ
しかも所有権管理全然できてないから、
コピーコンストラクタで渡すと移動せず不正アクセス
まだauto_ptrのがマシ
657デフォルトの名無しさん
2015/08/26(水) 19:43:14.93ID:8NpsUOma >>654
俺が一番多用する unique_ptr 忘れてるぞ
俺が一番多用する unique_ptr 忘れてるぞ
658NAS6 ◆n3AmnVhjwc
2015/08/28(金) 16:08:10.30ID:+cnZnxxc ttp://nas6.main.jp/sptr.cpp
メイン.cpp
ttp://nas6.main.jp/NAS6_smt_ptr.h
クラス.h
テンプレートが分割コンパイルできなくて四苦八苦した
メイン.cpp
ttp://nas6.main.jp/NAS6_smt_ptr.h
クラス.h
テンプレートが分割コンパイルできなくて四苦八苦した
659デフォルトの名無しさん
2015/08/28(金) 17:46:52.81ID:k07is2fO 相変わらず、コンテナとスマポの概念がごっちゃになってる
ゴミだな
ゴミだな
660デフォルトの名無しさん
2015/08/28(金) 18:09:08.58ID:xcCBDptJ スマートポインタは標準ライブラリので間に合ってるから、テンプレートベースのツリー
コレクション作ってよ。
コレクション作ってよ。
661NAS6 ◆n3AmnVhjwc
2015/08/29(土) 15:45:43.98ID:pKiDa5SQ ttp://nas6.main.jp/sptr.cpp
メイン.cpp
ttp://nas6.main.jp/NAS6_smt_ptr.h
スマートポインタ.h
ttp://nas6.main.jp/NAS6_tree_clct.h
ツリーコレクション.h
メイン.cpp
ttp://nas6.main.jp/NAS6_smt_ptr.h
スマートポインタ.h
ttp://nas6.main.jp/NAS6_tree_clct.h
ツリーコレクション.h
662NAS6 ◆n3AmnVhjwc
2015/08/29(土) 16:03:10.94ID:pKiDa5SQ ttp://nas6.main.jp/sptr.cpp
メイン.cpp
ttp://nas6.main.jp/NAS6_cntn_ptr.h
コンテナポインタ.h
ttp://nas6.main.jp/NAS6_tree_clct.h
ツリーコレクション.h
コンテナポインタに改名した
メイン.cpp
ttp://nas6.main.jp/NAS6_cntn_ptr.h
コンテナポインタ.h
ttp://nas6.main.jp/NAS6_tree_clct.h
ツリーコレクション.h
コンテナポインタに改名した
663デフォルトの名無しさん
2015/08/30(日) 10:50:41.54ID:wmtDMCmd NASさんは物理板で意味不明な投稿連投してたからいいや
664NAS6 ◆n3AmnVhjwc
2015/08/30(日) 12:51:30.00ID:AMlzbaWO ttp://nas6.main.jp/secret/ContainerPtr.htm
コンテナポインタ説明ページ
コンテナポインタ説明ページ
665NAS6 ◆n3AmnVhjwc
2015/09/03(木) 05:41:08.75ID:G+oloE/W ttp://nas6.main.jp/secret/ContainerPtr.htm
コンテナポインタ説明ページ
メモリリークを退治した^^
コンテナポインタ説明ページ
メモリリークを退治した^^
666デフォルトの名無しさん
2016/05/01(日) 15:30:23.69ID:tKi6j9CT 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
x
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
x
667デフォルトの名無しさん
2016/05/20(金) 22:33:03.96ID:/6R1fTEV スレタイから既にカレー臭が漂っているな
668デフォルトの名無しさん
2018/05/23(水) 23:11:05.75ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
IXJ2O
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
IXJ2O
669sage
2018/06/29(金) 01:37:13.04ID:+q6FXOFo main除くならタイトルに書いておいてくれよ
670デフォルトの名無しさん
2018/07/03(火) 08:22:05.32ID:K5qOAxd5 そんなC特有の問題を単独スレでやって楽しいか?
671デフォルトの名無しさん
2018/07/04(水) 08:31:29.03ID:OhQ1jOSL 楽しいよ
672デフォルトの名無しさん
2018/07/04(水) 21:48:24.45ID:gFgZc5FG SIT
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 731部隊の新資料、中国が公開 「日本が細菌戦の罪を自白」と主張 ロシアが引き渡し [少考さん★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★8 [ぐれ★]
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【広島】ペルー女性の国保加入を誤って認め、福山市が医療費484万円を肩代わりするミス…入院して手術を受ける [ぐれ★]
