CとかC++でさmallocとかnewとかで動的に変数確保するじゃんか?

1 : 2021/10/22(金) 00:18:46.370 ID:Oi87Jppr0
でも関数とかで最初から条件式書いてるとエラーになるんだけど
そこはどうやって回避するの?
2 : 2021/10/22(金) 00:19:39.592 ID:Q47zjeUm0
何言ってるかわからないからもう少し詳しく
6 : 2021/10/22(金) 00:21:22.818 ID:Oi87Jppr0
>>2
最初動的に確保してないと変数が無いじゃんか?
でも関数とかで引数とか含めて、変数はあります!で書くとエラーになるんだけど
3 : 2021/10/22(金) 00:19:48.832 ID:zy8V0Re40
動的に確保された変数くん
4 : 2021/10/22(金) 00:20:37.802 ID:TWPKKm1h0
ヌル
5 : 2021/10/22(金) 00:21:13.891 ID:CEKlTVtE0
7 : 2021/10/22(金) 00:22:28.529 ID:+PsjNtyg0
言葉で説明しないで画像で説明してくれわからん
8 : 2021/10/22(金) 00:22:50.641 ID:Q47zjeUm0
え、コンパイル時の話?
10 : 2021/10/22(金) 00:23:22.593 ID:Oi87Jppr0
>>8
うん
9 : 2021/10/22(金) 00:23:12.208 ID:Oi87Jppr0
動的に確保サッパリわからん(´・ω・`)
11 : 2021/10/22(金) 00:23:52.763 ID:SZ+XAls20
メソッドをインスタンス
12 : 2021/10/22(金) 00:24:02.039 ID:Oi87Jppr0
まあ当たり前だよね
変数無いんだもん
あるのを前提に条件式書いたらエラーになるよね
13 : 2021/10/22(金) 00:24:07.298 ID:J8kkIzYAd
動的か静的かによらず宣言は要る
14 : 2021/10/22(金) 00:24:11.711 ID:u89+/y4x0
現物見せろ😡
15 : 2021/10/22(金) 00:24:43.676 ID:+PsjNtyg0
だろうな
16 : 2021/10/22(金) 00:25:37.649 ID:8Zb23xDEr
条件の前でnewすれば良いだけでは
20 : 2021/10/22(金) 00:27:14.045 ID:Oi87Jppr0
>>16
そのスコープの中ならできるけど
例えばシーケンスによって新しく動的に確保した場合
元々のシーケンスの条件式をコンパイルしたらエラーになるじゃんか?
だってないじゃん?
23 : 2021/10/22(金) 00:29:24.414 ID:8Zb23xDEr
>>20
何言ってるかんからんけどインスタンス作成したあと関数の引数とかで渡せば良いんじゃね
27 : 2021/10/22(金) 00:31:48.593 ID:Oi87Jppr0
>>23
元々定義しといて
条件式や引数に書いておくなら出来るじゃんか?
でも途中から動的に確保したとすると
条件式や引数を最初に書いておくとエラーになるじゃんか?
30 : 2021/10/22(金) 00:33:06.162 ID:8Zb23xDEr
>>27
あー分かったわ
動的確保って変数を動的確保するわけじゃねぇんだよ
変数は予め宣言しとかなきゃいけない
変数の中身を動的に確保するんだよ
32 : 2021/10/22(金) 00:33:35.407 ID:Oi87Jppr0
>>30
わからんどういうこと?
33 : 2021/10/22(金) 00:34:18.645 ID:8Zb23xDEr
>>32
ポインタとか勉強まだしてない?
そこ理解してないと伝えても伝わらないから勉強したほうが良い
35 : 2021/10/22(金) 00:34:56.746 ID:Oi87Jppr0
>>33
ポインタは使いこなしてるからわかってる前提で説明してほしい
39 : 2021/10/22(金) 00:37:20.365 ID:8Zb23xDEr
>>35
よくその理解でポインタ使いこなしてるって言えるな……
c++のデータって変数に直接入ってるのと、別の場所にあるデータへのアドレスを変数に入れる二種類があるの
で、後者の別の場所にあるデータっていうのが動的に確保したデータのこと
44 : 2021/10/22(金) 00:40:55.044 ID:Oi87Jppr0
>>39
最初にドバーっと宣言するのは出来るんだけど
動的に確保して
不必要な時にリリースするってのが出来ないんだよ
なぜならば宣言してないから条件式や引数で書いていくとエラーになっちゃうから
そこで困ってんだわ
46 : 2021/10/22(金) 00:41:51.854 ID:8Zb23xDEr
>>44
そういう時は配列の長さで調整するの
変数ぽんぽん追加するわけじゃない
50 : 2021/10/22(金) 00:43:52.398 ID:Oi87Jppr0
>>46
よくわからんどういうこと?
17 : 2021/10/22(金) 00:25:54.151 ID:Oi87Jppr0
メインクラスの中でインスタンスを定義しといて
インスタンスを定義したクラスの中で増やしてそっちで条件式書くのか?
18 : 2021/10/22(金) 00:26:06.823 ID:F2zKBEjL0
条件式入れる前に条件が必要っちゅうことかいな?
22 : 2021/10/22(金) 00:28:00.732 ID:Oi87Jppr0
>>18
最初に条件式で存在するか?のチェックをしたらエラーにならないの?
19 : 2021/10/22(金) 00:27:04.621 ID:ZyV0+YAB0
引数で渡せよ
21 : 2021/10/22(金) 00:27:39.108 ID:5Gc0P0Zhr
コード貼れよ
24 : 2021/10/22(金) 00:29:50.700 ID:Oi87Jppr0
例えば
最初に何も定義しないじゃんか?
で、シーケンスによって条件式に書いたり、引数でその変数飛ばそうとすると
エラーになるじゃんか?
動的確保とは何なんだ?
25 : 2021/10/22(金) 00:30:06.843 ID:Q47zjeUm0
回避も何もプログラミング以前の問題

要するに動的に確保しないルートが存在してるってことでしょ?

なんていうか、、、うん、、どんまい。

28 : 2021/10/22(金) 00:32:27.158 ID:Oi87Jppr0
>>25
そう
何で駄目なん?
26 : 2021/10/22(金) 00:30:32.873 ID:J8kkIzYAd
参照渡しと値私の違いが理解できていない説
29 : 2021/10/22(金) 00:32:42.759 ID:ZyV0+YAB0
多分わからないことをわからないまま間違った方向に理解しようとしてるから具体例考えたほうがいいよ
31 : 2021/10/22(金) 00:33:06.319 ID:Oi87Jppr0
元々定義しておくなら何で動的に確保する必要があるんだ?
チンプンカンプン過ぎる
40 : 2021/10/22(金) 00:37:30.246 ID:FehnI0u90
>>31
Cの変数は名前に対してアドレスをセットするということをやっている
文脈としては宣言をしてそこにポインタを割り当てる順序でなければならない
基本的に全てがポインタで通常の変数の場合はポインタの記述を省略できるという感じ
47 : 2021/10/22(金) 00:43:02.734 ID:Oi87Jppr0
>>40
ポインタで宣言をしろという事なの?
それだとエラーにならんという事?

>>43
やってる!
それで*pをスコープ以外で書くとエラーになるということか

37 : 2021/10/22(金) 00:37:14.958 ID:NZLwI0Qw6
>>1
そういうときは最初に値をNULLにして、あらかじめ(ポインタ型の)変数だけを宣言しておくのが普通かと
42 : 2021/10/22(金) 00:39:13.086 ID:Oi87Jppr0
>>37
ポインタだけ宣言して
動的に確保する分を配列みたいに増やしていくイメージ?
そしてポインタで条件式を書くの?
そんな複雑な事が出来るの?
49 : 2021/10/22(金) 00:43:30.351 ID:NZLwI0Qw6
>>42
ポインタで条件式を書くの意味がいまいち分からないけど、malloc()でメモリを確保したあとで領域を拡張するにはrealloc()関数を使う
38 : 2021/10/22(金) 00:37:15.546 ID:Oi87Jppr0
ポインターを使って条件式を書いてないから俺は出来ないのか?
41 : 2021/10/22(金) 00:38:36.105 ID:SZ+XAls20
c#だと out があるけどc++だとない
48 : 2021/10/22(金) 00:43:06.873 ID:usW0+tR80
動的メモリ割り当て
malloc(), free()
new, delete
51 : 2021/10/22(金) 00:44:29.354 ID:EtjXPiAK0
変数のスコープは動的確保云々以前の問題だろ
52 : 2021/10/22(金) 00:45:39.789 ID:FehnI0u90
スコープ云々はC以前の問題だろ・・・
53 : 2021/10/22(金) 00:45:49.962 ID:Oi87Jppr0
例えばさ?
シューティングゲームがあるとするじゃんか?
1面で出てくる敵を一番最初に全部宣言するのは出来るんだ
でも動的に確保しようとすると途中で増やしたり減らしたり出来るようにしたいとすると
どういう感じになるの?
59 : 2021/10/22(金) 00:48:50.005 ID:NZLwI0Qw6
>>53
C++ならstd::vectorとかを使うのが一般的かと
Cならポインタを格納する配列を用意しておいて、その配列内の要素が指す領域が不要になったら都度都度free()関数を呼べば適切に開放される
60 : 2021/10/22(金) 00:49:03.449 ID:J8kkIzYAd
>>53
敵機なら予め作って置いた敵機というオブジェクトを動的に確保するだけだと思うが
61 : 2021/10/22(金) 00:49:25.360 ID:SZ+XAls20
>>53
ファミコンだと分かりやすいけど必ず最大数決まってる
最近のゲームはUnityだからC#でみんなList使いまくりですわ
普通の配列すら使わない時代
54 : 2021/10/22(金) 00:46:10.730 ID:3WKXtYI0d
もうちょっとこう謙虚な姿勢で話を聞けないかな
56 : 2021/10/22(金) 00:46:41.477 ID:82pHL68s0
今夜の「お前には無理」スレ
57 : 2021/10/22(金) 00:46:59.767 ID:LF7SBktz0
mallocは確保したポインタのメモリ範囲拡張するんじゃあなくて、確保してみてできたメモリのポインタを返すんやろ
58 : 2021/10/22(金) 00:47:29.752 ID:Oi87Jppr0
{
動的に確保
確保した変数へアクセス
}
これは出来るけど
{
{
動的に確保
確保した変数へアクセス
}
{
確保した変数へアクセス←これがスコープでエラーになるでしょ?
}
}
63 : 2021/10/22(金) 00:50:07.955 ID:wV1h419f0
磨呂ック

コメント

タイトルとURLをコピーしました