mallocの後にfree不要と言うバカいるの?Part2

1デフォルトの名無しさん2013/01/30(水) 21:38:37.44
fjの時代から10年以上に渡るmalloc/free問題について語ってください(^q^)

前スレ
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/

618デフォルトの名無しさん2014/12/29(月) 20:53:22.95ID:/sLHpawi
それが無尽蔵にないからswap地獄に陥るんじゃないか。

619デフォルトの名無しさん2014/12/29(月) 21:06:56.82ID:KuYXSH39
管理人がやって来る明確な規則がイマイチわからなくて気持ち悪い

620デフォルトの名無しさん2014/12/29(月) 21:14:34.42ID:bj0t/8Ju
大抵は「管理人仕事しろボタン」があるだろ

621デフォルトの名無しさん2015/02/06(金) 01:41:27.81ID:b3gwE4qm
>>553
>信者信者言うのは
自称だと思うよ
絶対というわけではなく細かい点で要不要が議論されることはあるからね

622デフォルトの名無しさん2015/02/21(土) 23:49:31.87ID:mk77xCMU

623デフォルトの名無しさん2015/02/22(日) 21:10:43.75ID:XKkbsrmM
>>622
懐かしい、あれから 15年かぁ

624デフォルトの名無しさん2015/02/24(火) 00:46:11.63ID:oRO5M8st
けっこう最近(?)の話なんだ‥面子的に1990年〜1995年くらいかと思っていた

625デフォルトの名無しさん2015/02/24(火) 00:57:46.90ID:zk/7dheO
>>624
Qちゃんfjに参加してたの?
QちゃんC/C++宿題スレで勉強始めたような28才くらいの若者かと思ってたけど(煽り抜き)
意外と古くからML読んでたりしてたの?
おどろき

626デフォルトの名無しさん2015/02/24(火) 01:14:22.05ID:oRO5M8st
>>625
>C/C++宿題スレで勉強始めたような
この部分は当たり他ははずれ
もう7, 8年くらいにはなるな‥
成長が遅いのは頭が悪いせいから仕方がない

627デフォルトの名無しさん2015/02/24(火) 13:58:34.87ID:T1wlJW1m
15年経っても同じような屁理屈をこねる者がいるというのは感慨深い

628デフォルトの名無しさん2015/07/03(金) 00:44:55.67ID:js6seqbJ
malloc()してfree()しない奴とかなんなの?
exeが終了すればOSがヒープ領域も解放してくれるからfree()不要とかなんなの?
内部で何度もmalloc()するアプリだと、free()しないと、ユーザーが定期的にアプリを
再起動しないとどんどんメモリが食われていく
そんなクソアプリを作る奴はいらね
だからfree()しとけカスども

629NAS6 ◆n3AmnVhjwc 2015/07/04(土) 07:15:01.94ID:+0FMM883
malloc()してfree()しないなら、素直に配列を使えばいいのに・・・

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()でメモリ節約の意図がないならば
プログラム仕様上の最大容量でグローバルスコープ配列確保で全て済むよ

634デフォルトの名無しさん2015/07/06(月) 08:25:50.04ID:UtQpsrfy
データ量が多くてスワップするほどメモリを使ってしまうのと、僅かなデータの為にスワップするほどメモリを確保するのでは話が違うけどね。

635デフォルトの名無しさん2015/08/25(火) 21:39:50.35ID:bwlYR2I5
何々全部配列でするの?
オブジェクトを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;}}
・・・にゃむにゃむ
}
コンパイル通してないからあれだけどこんなかんじに
コンストラクタとデストラクタをやっとけよ

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
 }
};

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使わないのがダメなだけだよ
スマートポインタを作りたいならこう書く

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のリサイズをするんならこんな感じ

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;
}

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); }

メモリの確保と破棄をこのスコープで自動的にやるよ
利用は参照渡しじゃないとデストラクタが複数回呼ばれちゃうけどな

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); }

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
  }
 }
つづき

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;
}

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使っとけ

654デフォルトの名無しさん2015/08/26(水) 12:36:46.52ID:tnAoTvL3
auto_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のがマシ

657デフォルトの名無しさん2015/08/26(水) 19:43:14.93ID:8NpsUOma
>>654
俺が一番多用する 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

テンプレートが分割コンパイルできなくて四苦八苦した

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

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

コンテナポインタに改名した

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的に分散され、特定のサーバーに依存しません

667デフォルトの名無しさん2016/05/20(金) 22:33:03.96ID:/6R1fTEV
スレタイから既にカレー臭が漂っているな

668デフォルトの名無しさん2018/05/23(水) 23:11:05.75ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

IXJ2O

新着レスの表示
レスを投稿する