のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

assert書くとWarning C6011

void func (unsigned char *addr)
{
 assert(addr != NULL);

 XXXXXXXXXXXXXXXXXXXXXXX
}

こんな感じで、assertを書くと、
Visual Studioのの静的分析ツール(PreFast)の機能でワーニングになるようだ。
Warning C6011:NULLポインタ'addr'を逆参照しています。

以下のホームページによると
http://connect.microsoft.com/VisualStudio/feedback/details/388402/warning-c6011-assert-macros-and-private-pointers

#define STRONG_ASSERT(x) assert(x); __analysis_assume(x)
にすると、警告がでないみたいだ。

どちらもちゃんと動くみたいだ。

Winアプリの場合、アサートのダイアログが出ないで、
異常終了で終わる場合があった。

#include "stdafx.h"
#include <assert.h>
#define STRONG_ASSERT(x) assert(x); __analysis_assume(x)

int func(unsigned char * addr);

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned char *addr = NULL;

	func (addr);
	return 0;
}

int func(unsigned char * addr)
{
	unsigned char chkStr[] = {'T','E','S','T'};

	STRONG_ASSERT(addr != NULL);
//	assert(addr != NULL);

	for (int i = 0; i < 4; i++)
	{
		if (addr[i] != chkStr[i])
		{
			return -1;
		}
	}
	return 0;
}