LPBYTE lpKeyValue2;
long ret2=::RegQueryValueEx( hKey, TEXT("address"), NULL,
&datatype, lpKeyValue2, &cbBufferSize); 没有初始化指针,内存错误。改为:
char lpKeyValue2[80];
long ret2=::RegQueryValueEx( hKey, TEXT("address"), NULL,
&datatype, &lpKeyValue2, &cbBufferSize);
long ret2=::RegQueryValueEx( hKey, TEXT("address"), NULL,
&datatype, lpKeyValue2, &cbBufferSize); 没有初始化指针,内存错误。改为:
char lpKeyValue2[80];
long ret2=::RegQueryValueEx( hKey, TEXT("address"), NULL,
&datatype, &lpKeyValue2, &cbBufferSize);
无论如何,这样没有初始化的指针是绝对不能出现的。
LPBYTE lpKeyValue = new BYTE[80];
ZeroMemory(lpKeyValue, 80);
再在每次退出之前,加上
delete [] lpKeyValue;
可是每次到了delete [] lpKeyValue;时就会出现断言错!把[]删掉,改为
delete lpKeyValue;就可以通过了。但是开始2,3次运行可以通过。可是后来就频繁报告无法读出原来的address值。非常疑惑。
1。为什么加上[]不行。它不是个char[80]的数组吗?
2。为什么有时可以成功运行,有时候不行?另外全部按照plato(天天)的方法把定义改为:char lpKeyValue[80];
无论给原来的参数加不加&,都会报告类型不符合的错,无法通过编译。那位能试着改改或者运行一下程序。
要解决的问题很简单。就是一开始去读注册表某个位置的键值,如果有就读取,没有就创建。然后在对话框退出之前,把从EDIT框中的数在写入到注册表指定位置。
无论给原来的参数加不加&,都会报告类型不符合的错,无法通过编译。
是不是其它地方产生的内存错,仔细检查,这段程序单独运行应该没有问题。
我把第二个RegQueryValueEx()给注释掉以后,程序非常稳定,什么问题都没有。奇怪了。shame。如果那位热心兄弟愿意给我看看,我可以发一个简单试验程序的源码供您斧正,赐教。多谢多谢。