4

私は計算生物物理学者であり、ソフトウェア エンジニアではないことから始めたいと思います。そのため、プログラミングに関する私の知識は科学計算に限定されています (私は C++、Matlab、および R を使用しています)。

私は最近、いくつかのコードを開発してきた MS Visual C++ から Linux に巨大なコード パッケージ (約 10,000 行) を移植するよう依頼されました。彼らは、私が Linux で書いていることを知っていたので、それを Windows の古いコードと統合したいとは、ほぼ 1 年後まで教えてくれませんでした。

正直なところ、どこから始めればよいかわかりません。MakeFile をまとめてコンパイルすることはできましたが、セグメンテーション エラーが発生しました。これは、valgrind による調査の結果、おそらく数百の管理されていないメモリ割り当てに関連している可能性があります。これを Linux で動作させるためだけに MS Visual C++ を学ぶ必要のない、始めるのに適した場所はありますか? どんな助けでも大歓迎です。ありがとう!

編集:これまでのすべての助けに感謝します。私は間違いなく「実際の」プログラミングの初心者なので、自分の問題をどのように説明すればよいかについて常に明確であるとは限りません。理解していただき、良い出発点を提供していただきありがとうございます。

4

2 に答える 2

9

コンパイラの警告をオンにして、すべての警告を修正することから始めます。

-Wall -Wextra -Wstrict-aliasing -pedantic -Werror -Wunreachable-code

すべての警告を修正すると、今まで見たことのない多くの問題が解決されます。特に、異なるコンパイラ間で移植する場合 (これらは、異なるコンパイラが異なることを実行できるため、移植に影響を与える問題を表しているため)。

MS コンパイラの場合。警告レベルを 4 まで上げて、コンパイラにすべての警告をエラーとして扱うように指示します。これらを組み合わせると、多くのエラーが発生します。

于 2013-04-17T19:50:04.463 に答える
3

このコードベースのサイズでは、既に気付いているランダムなメモリ管理の問題を修正することから始めれば、すぐにアプリケーションが動作するようになります。これは、各セグメンテーション違反を正しく診断していることを前提としていますが、これは質問からはあまり明らかではありません。新しいコードが正確に何をどのように行うかを学習するプロセスは、デバッグのプロセスと密接に関連しています。

既に Linux でコンパイルされている場合は、他のオペレーティング システムについて学習する必要はありません。これを機能させるために、理解できないコードを「コメント アウト」しなかったか、Windows 固有のライブラリへの参照を回避したと仮定します。それはアプリケーションで役割を果たした可能性があります。

于 2013-04-17T19:39:45.973 に答える