小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


C++

【cppcheck】error: Undefined behavior: Variable 'buf' is used as parameter and destination in sprintf().

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Undefined behavior: Variable 'buf' is used as parameter and destination in sprintf(). cppcheckのバージョン v1.89 サンプルプ…

Windows 10 SDK(gflags.exe)でヒープメモリ関連のバグを検出する

C++

はじめに C言語のプログラムで、獲得したヒープメモリ領域をオーバして書き込んだりすると、検出するのが難しいバグにつながります。 Windows 10 SDKに内包されるgflags.exeを使うと、こうしたヒープメモリ関連のバグを検出することができます。デバッグの理…

CppcheckがsyntaxErrorを吐いて静的解析が止まるのを回避する

c++

はじめに C++ソースプログラムの静的解析ツールCppcheckを使っていて、特定のソースプログラムでsyntaxErrorを吐いて静的解析が止まる事象に陥りました。Shift-JIS のソースで cppcheck が文字例をうまく解釈できないときに実際はエラーでもないのにそう解析…

MFCモジュールの状態データの管理(google翻訳)

C++

はじめに マイクロソフト社のMFC DLLの日本語翻訳説明が機械翻訳すぎて言ってることが全然分からないので、google翻訳にしてみました。 docs.microsoft.com 導入文 This article discusses the state data of MFC modules and how this state is updated whe…

スタティックライブラリでMFCを使用する、と共有DLLでMFCを使うの違い

c++

はじめに Visual StudioのMFCの設定には以下の2つがあります。 スタティックライブラリでMFCを使用する 共有DLLでMFCを使う この違いについて知らなかったので調べてみました。 ざっくり言うと スタティックライブラリでMFCを使用する 静的リンク 外部のMFC …

Visual Studioの/GS (セキュリティチェック)とは何なのか

C++

はじめに Visual Studioの/GS (バッファーのセキュリティ チェック)とは何なのかまとめてみました。 /GS (バッファーのセキュリティ チェック) プログラミングにおける誤りによって、関数のリターン アドレス、例外ハンドラーのアドレス、または特定の型のパ…

例外コード: 0xc0000409はSTATUS_STACK_BUFFER_OVERRUN

C++

はじめに アプリケーションを動かして、イベントビューアに例外コード: 0xc0000409が出ていたら、アプリケーションのどこかで、スタックバッファオーバランが起きてます。 例外コードの調べ方 例外コードは以下のページで調べることができます。 docs.micros…

Visual Studio 2015でアセンブリコードを出力する方法

c++

はじめに Visual Studioでアセンブリコードを出力する方法です。 Windows10 Visual Studio 2015 Update3 Visual Studioでアセンブリコードを出力する方法 ソリューションのプロパティから「C/C++」→「出力ファイル」→「アセンブリの出力」で「アセンブリコー…

warning C28251: 'WinMain' に対する整合性のない注釈: このインスタンスには 注釈なし が含まれます。

c++

はじめに VC++のコード分析機能でソースコードを静的解析した場合に、以下の警告がでることがあります。 warning C28251: 'WinMain' に対する整合性のない注釈: このインスタンスには 注釈なし が含まれます。 バージョン Visual Studio 2015 Update3 対処方…

SonarQubeとCppcheckを連携させる

C++

はじめに Cppcheckの解析結果をSonarQubeのダッシュボード上に表示させる方法です。事前に対象のソリューションに対して、Cppcheckを行い、結果をXMLファイルへ出力してください。 Cppcheckの解析結果をダッシュボード上に表示させる プロジェクト設定から左…

Cppcheckで静的解析結果をXML形式で出力する

C++

はじめに この記事は、Cppcheckで静的解析結果をXML形式で出力する方法を書いています。 xmlオプション xmlオプションを指定して、リダイレクト先にファイル名を指定します。 set path=%PATH%"C:\Program Files (x86)\Cppcheck"; cppcheck --xml C:\sonar-sc…

SonarQube7.5でC++コードを静的解析してみる

C++

はじめに SonarQubeでC++コードを静的解析してみました。 SonarQube 7.5 SonarQube Scanner 3.3 sonar-cxx Plugin 1.2.1 JRE Version 8 Update 201 ソフトウェアメトリクス統計分析入門―現場エンジニアによる直観的解説と実践ドリルposted with amazlet at 1…

ファイルハンドルからファイル名などの情報を取得したい

C++

はじめに VC++でファイルハンドルからファイル名などのファイル情報を取り出したい。たとえば、CloseHandleのラッパー関数があって、すべての呼び出し元はこのラッパー関数を使っていたとします。ラッパー関数内でファイルハンドルからファイル情報を取得で…

Visual Studio 2015(VC++)でQRコードを生成する

c++

photo credit: Radar Dish QR Code via photopin (license) はじめに Visual Studio 2015(VC++)でQRコードを生成する方法を記載しています。 環境 Windows 7 Pro 32bit Visual Studio 2015 QRコード生成ライブラリ http://www.psytec.co.jp/freesoft/03/ 準…

【cppcheck】warning: Either the condition 'x' is redundant or there is possible null pointer dereference

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 warning: Either the condition 'x' is redundant or there is possible null pointer dereference. cppcheckのバージョン v1.73 サンプル…

【cppcheck】error: Deallocating a deallocated pointer: xxx

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Deallocating a deallocated pointer: xxx cppcheckのバージョン v1.72 サンプルプログラム 以下のソースプログラムを解析にかける…

SonarQubeでC++コードを静的解析してみる

C++

このエントリは古くなっています。 新しい記事はこちら。 replication.hatenablog.com はじめに SonarQubeでC++コードを静的解析してみました。 SonarQubeについては以下の記事をご欄ください。 SonarQubeでプログラムの品質管理をはじめる(概要) - Qiita …

【VS2015】コマンドラインからcl.exeのコード分析(/analyze)を利用する

C++

はじめに Visual Studioのコード分析機能を使って、ソースコードの静的解析を行うことができます。 GUIから実行すると複数のソースコードを一度に分析にかけずらいので、コマンドラインから実行できないかと考えました。 環境 Windows 8.1 Ent(32bit) Visual…

C言語で平日と土日を判定する

C++

はじめに C言語で平日と土日を判定するには、tm_wdayで曜日を表す数値を取り出し、土曜と日曜を平日以外と判定します。 このプログラムは、祝祭日には対応していません。 土日判定プログラム t.tm_wdayを判定して、日曜(0)と土曜(6)はtrueを返します。 bool …

Visual Studio 2013でリファクタリングを行う方法

C++

はじめに Visual Studio Community 2013でC++のソースプログラムのリファクタリング(名前変更)を行う方法について書いています。Microsoft Visual Studio Professional 2013 通常版posted with amazlet at 15.05.30マイクロソフト (2013-11-29)売り上げラ…

【cppcheck】error: Common realloc mistake: 'tmp' nulled but not freed upon failure

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Common realloc mistake: 'tmp' nulled but not freed upon failure サンプルプログラム #include "stdafx.h" #include <Windows.h> int _tmain</windows.h>…

C6308 Reallocのリーク

C++

はじめに 以下のプログラムをコード解析にかけると、C6308 Reallocのリークという警告が出力されます。 C6308 Realloc のリーク 'realloc' は null ポインターを返す可能性があります: null ポインターを、引数として 'realloc' へ渡された 'tmp' に割り当て…

コマンドラインからcl.exeのコード分析(/analyze)を利用する

C++

はじめに Visual Studioのコード分析機能を使って、ソースコードの静的解析を行うことができます。 GUIから実行すると複数のソースコードを一度に分析にかけずらいので、コマンドラインから実行できないかと考えました。 環境 Windows 7 Pro(32bit) Visual S…

【VC++】GetLastError()のコードからエラーメッセージを取得する

C++

はじめに GetLastError()のコードからエラーメッセージを取得するサンプルプログラムです。 GetLastError()のコードからエラーメッセージを取得する #include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { LPTSTR lpMessageBuffer = NULL; </windows.h>…

VC++で作るマルチスレッドと排他制御のサンプルプログラム

はじめに VC++でマルチスレッドプログラミングのサンプルコードを書いてみました。 以下のページに書かれているサンプルプログラムがVS2013にコピーペーストするだけで実行できて、とても参考になりました。マルチスレッドプログラミング スレッドの作成 ス…

【cppcheck】warning: Opposite conditions in nested 'if' blocks lead to a dead code block.

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 warning: Opposite conditions in nested 'if' blocks lead to a dead code block. cppcheckのバージョン v1.67 サンプルプログラム 以下の…

【cppcheck】warning: Redundant assignment of 'xxx' to itself.

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 warning: Redundant assignment of 'xxx' to itself. cppcheckのバージョン v1.67 サンプルプログラム 以下のソースプログラムを解析にかけ…

【cppcheck】error: Memory is allocated but not initialized: xxx

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Memory is allocated but not initialized: xxx cppcheckのバージョン v1.66 サンプルプログラム 以下のソースプログラムを解析にか…

【cppcheck】(warning) %d in format string (no. 1) requires 'int' but the argument type is 'ULONG {aka unsigned long}'.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (warning) %d in format string (no. 1) requires 'int' but the argument type is 'ULONG {aka unsigned long}'. cppcheckのバージョン v1…

【VC++】OCIを使ってOracle DBに接続するコード書いたよ。

C++

はじめに VC++でOCI(Oracle Call Interface)を使ってOracleに接続して、レコードをselectするコードを書いてみました。 参考にしたのは以下のページです。C言語の勉強3 Oracleデータベース接続 - 日記とかプログラムとか OCI (Oracle Call Interface) 新・門…