List ポインターを逆参照して C++ のリストにアクセスするにはどうすればよいですか?
次のように実行すると、bad_alloc エラーが発生します。
List My_List = *ls;
ls
ですList*
。コードの前に、私は持っていました:
List* ls = & Temp_List;
の値をls
整数として使用しました。私はそれをさまざまな関数に渡しました。キャストして逆List*
参照したいので、エラーが発生します
リストをスタックに配置すると、そのアドレスが変更される可能性があります。ただし、ヒープに割り当てると、リストへのポインター (new または malloc) が失われません。
実際、このコードではリストポインタを逆参照しました。*ls;
次に、このコードのスタックに新しいリストオブジェクトを作成し、次のコードでリストをこのリストに
List My_List
コピー しました。<newly created list> = <your list reference>
(間接参照演算子を適用すると、参照が取得されます。これがC ++です)
リストのコピーにはメモリの割り当てが含まれるため、このコピー中にstd :: bad_allocが発生する可能性があります。おそらく、元のリストが破棄されるため、元のリストへのポインタがランダムなガベージを指し、このガベージプログラムに基づいてメモリの量が決まります。リストのコピーに割り当てます。したがって、元のリストがまだ有効であることを確認してください。
または、次のようにコードを修正しますList& My_List = *ls
。後でどこかでクラッシュします。
これを試してみてください。
List *My_List = ls;