2016-08-02 6 views
0

に私のmallocの/のcallocを返さmatches[4]?私はポインタが4バイトを占めることを知っているので混乱していますが、matches[4]のロジックに従うと私のプログラムがクラッシュし、matches[1]のロジックに従うとmatchesを書き込むときにプログラムが完全に動作します。配列はのは、私は次のことを持っていると言うのObjective-C

さらに、callocの代わりにmallocを使用した場合はどうなりますか?

+1

第2ポインタは[1]と一致します。 callocが正しい場合、すべてのメモリ位置が0に初期化されます。 –

+0

ありがとう@OmidCompSCI!そして、その仕組みを内部的に説明してもらえますか?なぜそれが本当ですか?私はちょうどそれの周りに私の頭を完全にラップしようとしています。 – Paluter

+0

ポインタが4バイトを占めるものは何もありません。ポインターはメモリ位置を指していますが、実際のメモリを占有していません。そうでないと思ってはいけません。何か他のものがメモリを占めていますが、トップ "/すでにメモリを占めていることを指しています。そして、マッチ[4]はおそらく、あなたがそれほど多くのスペースを割り振っていないために動作しません。あなたが割り当てている場所の数がわかりません。それは[myArray count]までです。 –

答えて

1

コンパイラがポインタ(あなたの場合はポインタ)のサイズをタイプ(MyClass * __strong *matches)から知っているため、インデックス操作をコンパイルする方法を決定するためにコンパイラが使用するためです。比較のために

int x[4]char y[4]を検討し、インデックスが配列の先頭が、この場合では項目int(おそらく4または8バイトである「項目 4」から「バイトが4オフセット」という意味ではありません)またはchar(1バイト)。 "配列"にポインタ(おそらく4または8バイト)があり、コンパイラはそれをその型から知っています。

HTH

関連する問題