に私のmallocの/のcallocを返さmatches[4]
?私はポインタが4バイトを占めることを知っているので混乱していますが、matches[4]
のロジックに従うと私のプログラムがクラッシュし、matches[1]
のロジックに従うとmatches
を書き込むときにプログラムが完全に動作します。配列はのは、私は次のことを持っていると言うのObjective-C
さらに、calloc
の代わりにmalloc
を使用した場合はどうなりますか?
に私のmallocの/のcallocを返さmatches[4]
?私はポインタが4バイトを占めることを知っているので混乱していますが、matches[4]
のロジックに従うと私のプログラムがクラッシュし、matches[1]
のロジックに従うとmatches
を書き込むときにプログラムが完全に動作します。配列はのは、私は次のことを持っていると言うのObjective-C
さらに、calloc
の代わりにmalloc
を使用した場合はどうなりますか?
コンパイラがポインタ(あなたの場合はポインタ)のサイズをタイプ(MyClass * __strong *matches
)から知っているため、インデックス操作をコンパイルする方法を決定するためにコンパイラが使用するためです。比較のために
がint x[4]
対char y[4]
を検討し、インデックスが配列の先頭が、この場合では項目はint
(おそらく4または8バイトである「項目 4」から「バイトが4オフセット」という意味ではありません)またはchar
(1バイト)。 "配列"にポインタ(おそらく4または8バイト)があり、コンパイラはそれをその型から知っています。
HTH
第2ポインタは[1]と一致します。 callocが正しい場合、すべてのメモリ位置が0に初期化されます。 –
ありがとう@OmidCompSCI!そして、その仕組みを内部的に説明してもらえますか?なぜそれが本当ですか?私はちょうどそれの周りに私の頭を完全にラップしようとしています。 – Paluter
ポインタが4バイトを占めるものは何もありません。ポインターはメモリ位置を指していますが、実際のメモリを占有していません。そうでないと思ってはいけません。何か他のものがメモリを占めていますが、トップ "/すでにメモリを占めていることを指しています。そして、マッチ[4]はおそらく、あなたがそれほど多くのスペースを割り振っていないために動作しません。あなたが割り当てている場所の数がわかりません。それは[myArray count]までです。 –