1

私たちは、C++ でヒープを作成および管理する必要があるプロジェクトに取り組んでいます。メモリを格納するために文字配列を使用しています (プロジェクトでは "new" を使用しません)。型 T のポインターを返す必要がある割り当て関数があります。いくつかの型定義とそれを支援するテンプレートがあります。

template <typename T>
typedef T    value_type;
typedef value_type*  pointer;

したがって、「ポインタ」を返す必要があります。質問:

文字配列内の特定のインデックスを指す「ポインタ」を返すにはどうすればよいでしょうか?

割り当てられたブロックの開始点がアドレス 5 を指し、型名 T が int であるとします。5 の配列インデックスを指す int ポインターを (「ポインター」を使用して) 作成するにはどうすればよいでしょうか?

reinterpret_cast <pointer> (a[index])配列インデックスをポインターにキャストするために使用してみました。さらにreinterpret_cast <pointer> (a + index)、配列ポインターを取得し、それをインデックスで上に移動し、それを型ポインターにキャストしようとしました。毎回、ポインターは「0xfffffffffff」または一連の f の後に 0c または何らかのランダムな値が続くようなものを指しているため、プログラムの後半 (たとえば、構成関数) で参照解除すると、セグメンテーション違反が発生します。

ありがとう!

配列を編集する "a" は文字配列です

4

1 に答える 1

0

私たちはそれを理解したと思います。我々は持っていた:

reinterpret_cast <pointer> (a[index])

これにより、配列のインデックスのポインターが得られます(基本的には、値へのポインターはなく、値のポインターです)。

に変更しました

reinterpret_cast <pointer> (&a[index])

これにより、配列のインデックスへのポインターが得られます (基本的には値ではなく値のポインター)。この "of" と "to" の微妙な使い方がうまくいかない場合は申し訳ありません。の違いだと思います。

int a = 5

int* k = &a

int* k = a //even though this wouldnt compile

于 2012-10-10T03:10:22.203 に答える