ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

putenvに渡す引数についての注意

発生した問題

 putenvでDISPLAY環境変数書きこんで、SDLの初期化したらコアダンプした。試しに文字リテラルを関数に直接渡したら何故かうまく動いた。

何が問題だったのか

 putenvに渡す引数にnewで確保したヒープ領域のアドレスを渡したのが原因の模様。恐らく、環境変数を設定したあと、参照するときは自分で確保したメモリ領域を参照されている?

どうすればいいのか

 ヒープとか自動変数とかだと設定に成功しても設定した引数を参照するときにエラーを吐かれるので、リンクローカルなグローバル変数としてcharの配列を用意して、それに必要な環境変数書きこんでputenvに渡せば良い。