以下のコードにて、int型のパラメータを指定すれば987...0と出力されるところ、ポインタ型をしたところt.push(&num)が意図した通りに動作せず999...9と出力されてしまいました。
そこで質問があります
- numの寿命はforブロック内で終わるが、この記述に問題はないか
- 恐らくコンパイラの最適化でnumがforの外で宣言され、tにすべて同じアドレスがpushされるためこのようなことが起こっているのだと思われるが、numをそれぞれ別のアドレスに定義し、tの寿命までこれを保持する方法はあるか
可能な限りint*型のままで実装したいのです。
解決策をご教授ください。
開発環境:OS Windows10Home コンパイラ Clang6.0.0
Cpp
1#include <iostream> 2#include <stack> 3using namespace std; 4 5int main() { 6▸---stack<int*> t; 7 8▸---for (int i = 0; i < 10; i++) { 9▸---▸---int num = i; 10▸---▸---t.push(&num); 11▸---} 12▸---while (!t.empty()) { 13▸---▸---cout << *t.top() << endl; 14▸---▸---t.pop(); 15▸---} 16}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/08 16:42