0

List ポインターを逆参照して C++ のリストにアクセスするにはどうすればよいですか?

次のように実行すると、bad_alloc エラーが発生します。

 List My_List = *ls;

lsですList*。コードの前に、私は持っていました:

List* ls = & Temp_List;

の値をls整数として使用しました。私はそれをさまざまな関数に渡しました。キャストして逆List*参照したいので、エラーが発生します

4

3 に答える 3

1

リストをスタックに配置すると、そのアドレスが変更される可能性があります。ただし、ヒープに割り当てると、リストへのポインター (new または malloc) が失われません。

于 2012-11-01T14:19:07.953 に答える
0

実際、このコードではリストポインタを逆参照しました。*ls;

次に、このコードのスタックに新しいリストオブジェクトを作成し、次のコードでリストをこのリストに List My_Listコピー しました。<newly created list> = <your list reference>

(間接参照演算子を適用すると、参照が取得されます。これがC ++です)

リストのコピーにはメモリの割り当てが含まれるため、このコピー中にstd :: bad_allocが発生する可能性があります。おそらく、元のリストが破棄されるため、元のリストへのポインタがランダムなガベージを指し、このガベージプログラムに基づいてメモリの量が決まります。リストのコピーに割り当てます。したがって、元のリストがまだ有効であることを確認してください。

または、次のようにコードを修正しますList& My_List = *ls。後でどこかでクラッシュします。

于 2012-10-17T22:26:44.517 に答える
0

これを試してみてください。

List *My_List = ls;
于 2012-10-17T20:29:22.967 に答える