ここから本文です

Visual C++でBoostを使って逆行列を計算するコードをコンパイルすると、コンパイラ...

be_********さん

2011/12/216:53:16

Visual C++でBoostを使って逆行列を計算するコードをコンパイルすると、コンパイラから警告が出ます。

警告の文章は
c:\program files\microsoft visual studio 10.0\vc\include\memory(348): warning C4996: 'std::_Uninitialized_copy0': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1> c:\program files\microsoft visual studio 10.0\vc\include\memory(333) : 'std::_Uninitialized_copy0' の宣言を確認してください。
といった内容です。
確かに、コンパイルオプションに-D_SCL_SECURE_NO_WARNINGSを指定すると警告自体は消えるのですが、そもそもこの警告はどういった意味があるのでしょうか?
また、根本的な解決法なども知りたいです。

コードは
http://www.page.sannet.ne.jp/d_takahashi/boost/ublas/index.html#SEC...
の最後の方にある逆行列を計算するものを使いました。

Boostのバージョンは1.47、Visual C++ 2010 ExpressEditionです。

閲覧数:
2,403
回答数:
2

違反報告

ベストアンサーに選ばれた回答

えびさん

2011/12/221:38:16

それはMSVC的な都合で、C++の文法的にまずいわけではありません。
他のコンパイラではその警告はでないとおもいます。

std::_Uninitialized_copy0の使用を「推奨しない」というだけです。
オーバーフローとかするかもしれないので責任持ちたくないみたい。

http://msdn.microsoft.com/ja-jp/library/ctht4stc.aspx
の用例の中でも警告がでるっぽいですが・・ //C4996とあるし。
代替関数がある場合は こっちを使えと言ってくるので 無いのかもしれません。

#pragma warning(disable : 4996)
で矯正するのが一番楽かと。
実行中にエラーが起こるようなら疑う候補くらいにしておく感じで。

このへんがMSVCの嫌なところなんですよね・・

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

kam********さん

2011/12/217:37:23

C++やC言語の文法としては正しいけれども
今までバッファのオーバーフローなどを引き起こす可能性のある関数は
MSがワーニングを出すように修正しました。
こいつも、そのうちの1つだと思われます。

fopenはfopen_sを使えとかsprintfはsprintf_sを使えとか
scanfはscanf_sを使えとか・・・
使い方を間違えなければ問題は発生しないので気にしないのが一番かもしれませんね。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる