- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:飛ぶ理由がわかりません)
飛ぶ理由がわかりません
このQ&Aのポイント
- VC2010で書かれたコードについて、アプリが飛んでしまう現象が起きています。
- 同じことをしているはずなのに、1の方法ではアプリが飛び、2の方法では正常に動作します。
- 原因がわからず、環境の問題なのかもしれません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
パスの文字列に格納領域が1は静的領域ですが、2は動的領域ですね。 CreateProcessの仕様を見ると、第2パラメータの型はLPTSTRとなっています。これは動的領域ってことですよね。静的領域が要求されている場合だとLPCTSTRになるはずですよね。 ただ、この違いで動作が変わるって例をあまり知らないです。第2パラメータの領域が関数内で一時的に書換えられたりするんでしょうかね。
その他の回答 (1)
- maiko0333
- ベストアンサー率19% (839/4401)
回答No.1
そのように書かなければならないと覚えてください。 LPTSTR の第2引数はTEXT("C:\\Windows\\Notepad")ではなくて、 LPTSTRで定義されたszCmdlineであると。
質問者
お礼
回答ありがとうございます そのように書かなければならない とのことですが ネット上のサンプル検索では実際に1のパターンで記載しているものもあり 手元で同じコードを実行したところ動いています http://www.kumei.ne.jp/c_lang/intro2/no_113.htm 違いとすればコンソールアプリ(マルチバイト)か Win32アプリ(Unicode)の違いくらいです もしマルチバイト/Unicodeで動きが違うのであればそういうものだ ではなくてバグの一種ではないかと思うのですがどうなのでしょうか?
お礼
なるほど 正直な処 これまで動的・静的にそこまで気を使っていませんでした >この違いで動作が変わるって例をあまり知らないです ですよね 固定で書いてある例が動いたりしているので????状態だったのですが これからもっとパラメータに注意したいと思います UNICOD指定した時はより注意しないと危ないな と実感しました (ほとんどマルチバイトで書いていた)