c与cpp输出16进制,8进制及ASCII

1.c

#include <stdio.h>
int main(int argc,char **argv)
{
	for(int i=0;i<=127;i++)
	{
		printf("%X-%03o-%c\n",i,i,i);
	}
	return 0;
}

2.cpp

#include <iostream>
#include <iomanip>

using namespace std;

int main(int argc,char **argv)
{
	for(int i=0;i<=127;i++)
	{
		cout<<setw(2)<<setfill('0')<<hex<<i<<"-"<<setw(3)<<setfill('0')<<oct<<i<<"-"<<dec<<(char)i<<endl;
	}

	return 0;
}

cpp中删除一个静态局部变量?

大家都知道,static变量,内容在堆中分配的,new来的对象也是堆中分配的,
那么,如果在cpp中删除一个静态局部变量,后果是什么?
编译错误?还是运行错误?
比如下面的aTest函数,能运行吗?

#include <iostream>
using namespace std;

int aTest()
{
	static int a=0;
	int *b=&a;
	delete b;
	return a++;
}

int main(int argc,char** argv)
{
	for(int i=0;i<100;i++)
	{
		cout<<aTest()<<endl;
	}
	return 0;
}

事实是,
在gcc下,无论debug还是release,都没有问题,
在vc下,debug会报assert错误,release没有问题。
那cpp下,内存管理是谁做的?编译器为什么让它过去了呢?
其实,个人感觉,也就是上面的内存操作并不多,复杂情况下,早就挂了。

CDatabase中Open与OpenEx

昨天帮同事调试一段Windows服务代码,
其实很简单,但诡异的是,在服务中一直无法Catch到数据库无法连接的错误。

一开始,我以为他没有加载资源,少了:

AfxSetResourceHandle(GetModuleHandle(NULL));

这句话

后来发现,错误根本无法catch到,运行后直接向死了一样,等了几分钟还是这样
后来仔细看了下代码

db.OpenEx(szConnect);

天啊
直接换成

db.Open(szConnect);

问题解决。

Service里弹什么对话框啊,晕。