user-0 提问: 执行时，该内存不能为"read"，求指点！

回复:
user: user-0
content: 午夜散分！多谢各位大虾的热情支持了！

user: user-1
content: 下面是VC debug下，常见的几个内存问题 　　0xcdcdcdcd - Created but not initialized  　　0xdddddddd - Deleted  　　0xfeeefeee - Freed memory set by NT's heap manager  　　0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ  　　0xabababab - Memory following a block allocated by LocalAlloc()

user: user-1
content: 哪个指针（局部变量的）没有初始化，自己找找。

user: user-0
content: 引用 17 楼 a1193561652 的回复:其实我想说我真的不知道C的实现标准什么的。 另，我看了我刚才的解释觉得写的有点误导楼主， wc={xxx}；是将wc的第一个成员赋值为xxx，后面的成员没有给出要付的值，就默认赋值为0了。 所以wc={2}；不是将每一个成员都赋值为2，是只将第一个成员赋值为2，后面的都是0. 没关系。能给我解释这么多已经远远超过我的预期了！谢谢了，帅哥！

user: user-2
content: 引用 18 楼 call_from_dream 的回复:[quote=引用 16 楼 sholber 的回复:] [quote=引用 15 楼 a1193561652 的回复:] [quote=引用 13 楼 sholber 的回复:] [quote=引用 12 楼 a1193561652 的回复:] [quote=引用 10 楼 sholber 的回复:] [quote=引用 9 楼 a1193561652 的回复:] [quote=引用 5 楼 call_from_dream 的回复:] [quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。[/quote]  struct T {char a, b, c, d, e;} t = {0}; 这样，结构的所有成员都是0了？ 你的依据呢，小朋友？[/quote] int main() { 	struct T 	{ 		int a,b,c; 	} t1={0},t2; 	cout<<t1.a<<t1.b<<t1.c<<endl; 	cout<<t2.a<<t2.b<<t2.c<<endl; 	return 0; } [/quote]  这就是你的依据？我很惊讶。你知道吗，C的实现有符合标准的，也有不符合标准的，还有没跟上标准的。[/quote]好吧确实不知道，这个写法是我不知道在哪看的，不过一直在用而且很好用的样子。[/quote]  哈哈哈，你应该坚持自己的观点，不要被我恶意地左右自己的想法。如果觉得自己正确，要找资料为自己辩护。 其次你是对的。 N1570－－－ Committee Draft — April 12, 2011 ISO/IEC 9899:201x 6.7.9 Initialization If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static or thread storage duration is not initialized explicitly, then: — if it has pointer type, it is initialized to a null pointer; — if it has arithmetic type, it is initialized to (positive or unsigned) zero; — if it is an aggregate, every member is initialized (recursively) according to these rules, and any padding is initialized to zero bits; — if it is a union, the first named member is initialized (recursively) according to these rules, and any padding is initialized to zero bits;  If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.[/quote] 弱弱的问一句：大虾，你这资料在哪找的？[/quote]  C99标准的pdf，网上多得很； C11标准的PDF，n1570 但C11没有正式官方文本的PDF

user: user-2
content: C99标准的pdf，网上多得很； C11标准的PDF，n1570 但C11没有正式官方文本的PDF

user: user-0
content: 引用 16 楼 sholber 的回复:[quote=引用 15 楼 a1193561652 的回复:] [quote=引用 13 楼 sholber 的回复:] [quote=引用 12 楼 a1193561652 的回复:] [quote=引用 10 楼 sholber 的回复:] [quote=引用 9 楼 a1193561652 的回复:] [quote=引用 5 楼 call_from_dream 的回复:] [quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。[/quote]  struct T {char a, b, c, d, e;} t = {0}; 这样，结构的所有成员都是0了？ 你的依据呢，小朋友？[/quote] int main() { 	struct T 	{ 		int a,b,c; 	} t1={0},t2; 	cout<<t1.a<<t1.b<<t1.c<<endl; 	cout<<t2.a<<t2.b<<t2.c<<endl; 	return 0; } [/quote]  这就是你的依据？我很惊讶。你知道吗，C的实现有符合标准的，也有不符合标准的，还有没跟上标准的。[/quote]好吧确实不知道，这个写法是我不知道在哪看的，不过一直在用而且很好用的样子。[/quote]  哈哈哈，你应该坚持自己的观点，不要被我恶意地左右自己的想法。如果觉得自己正确，要找资料为自己辩护。 其次你是对的。 N1570－－－ Committee Draft — April 12, 2011 ISO/IEC 9899:201x 6.7.9 Initialization If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static or thread storage duration is not initialized explicitly, then: — if it has pointer type, it is initialized to a null pointer; — if it has arithmetic type, it is initialized to (positive or unsigned) zero; — if it is an aggregate, every member is initialized (recursively) according to these rules, and any padding is initialized to zero bits; — if it is a union, the first named member is initialized (recursively) according to these rules, and any padding is initialized to zero bits;  If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.[/quote] 弱弱的问一句：大虾，你这资料在哪找的？

user: user-3
content: 其实我想说我真的不知道C的实现标准什么的。 另，我看了我刚才的解释觉得写的有点误导楼主， wc={xxx}；是将wc的第一个成员赋值为xxx，后面的成员没有给出要付的值，就默认赋值为0了。 所以wc={2}；不是将每一个成员都赋值为2，是只将第一个成员赋值为2，后面的都是0.

user: user-2
content: 引用 15 楼 a1193561652 的回复:[quote=引用 13 楼 sholber 的回复:] [quote=引用 12 楼 a1193561652 的回复:] [quote=引用 10 楼 sholber 的回复:] [quote=引用 9 楼 a1193561652 的回复:] [quote=引用 5 楼 call_from_dream 的回复:] [quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。[/quote]  struct T {char a, b, c, d, e;} t = {0}; 这样，结构的所有成员都是0了？ 你的依据呢，小朋友？[/quote] int main() { 	struct T 	{ 		int a,b,c; 	} t1={0},t2; 	cout<<t1.a<<t1.b<<t1.c<<endl; 	cout<<t2.a<<t2.b<<t2.c<<endl; 	return 0; } [/quote]  这就是你的依据？我很惊讶。你知道吗，C的实现有符合标准的，也有不符合标准的，还有没跟上标准的。[/quote]好吧确实不知道，这个写法是我不知道在哪看的，不过一直在用而且很好用的样子。[/quote]  哈哈哈，你应该坚持自己的观点，不要被我恶意地左右自己的想法。如果觉得自己正确，要找资料为自己辩护。 其次你是对的。 N1570－－－ Committee Draft — April 12, 2011 ISO/IEC 9899:201x 6.7.9 Initialization If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static or thread storage duration is not initialized explicitly, then: — if it has pointer type, it is initialized to a null pointer; — if it has arithmetic type, it is initialized to (positive or unsigned) zero; — if it is an aggregate, every member is initialized (recursively) according to these rules, and any padding is initialized to zero bits; — if it is a union, the first named member is initialized (recursively) according to these rules, and any padding is initialized to zero bits;  If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.

user: user-3
content: 引用 13 楼 sholber 的回复:[quote=引用 12 楼 a1193561652 的回复:] [quote=引用 10 楼 sholber 的回复:] [quote=引用 9 楼 a1193561652 的回复:] [quote=引用 5 楼 call_from_dream 的回复:] [quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。[/quote]  struct T {char a, b, c, d, e;} t = {0}; 这样，结构的所有成员都是0了？ 你的依据呢，小朋友？[/quote] int main() { 	struct T 	{ 		int a,b,c; 	} t1={0},t2; 	cout<<t1.a<<t1.b<<t1.c<<endl; 	cout<<t2.a<<t2.b<<t2.c<<endl; 	return 0; } [/quote]  这就是你的依据？我很惊讶。你知道吗，C的实现有符合标准的，也有不符合标准的，还有没跟上标准的。[/quote]好吧确实不知道，这个写法是我不知道在哪看的，不过一直在用而且很好用的样子。

user: user-0
content: 引用 4 楼 u011779875 的回复:问题解决分析思路 找本Win32手册 查找出错的位置的函数RegisterClass 描述函数功能：该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 返回值：如果函数成功，返回值是唯一标识已注册的类的一个原子；如果函数失败，返回值为0。若想获得更多错误信息，请调用GetLastError函数 之后你需要灵感 RegisterClassEx 这个函数 发现不会崩溃，也许这就是为什么出现扩展的一部分原因。 之后你调用GetLastError(); 发现返回值是87 之后你会百度ERROR_INVALID_PARAMETER,可能某个参数不合法 之后你会找个合法的参数进行对比      WNDCLASS wndcls;     wndcls.cbClsExtra=0;     wndcls.cbWndExtra=0;     wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);     wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);     wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);     wndcls.hInstance=hInstance;     wndcls.lpfnWndProc=NULL;     wndcls.lpszClassName="Weixin2003";     wndcls.lpszMenuName=NULL;     wndcls.style=CS_HREDRAW | CS_VREDRAW;*/ 很容易得出 wc.lpszMenuName=NULL; 没有设置 导致的 之后你会去了解为什么会这样 不设置就报错了呢 之后 之后 之后 。。。。。。 弱弱的问一句：你是怎么通过Win32手册就查到了出错的位置的函数RegisterClass？

user: user-2
content: 引用 12 楼 a1193561652 的回复:[quote=引用 10 楼 sholber 的回复:] [quote=引用 9 楼 a1193561652 的回复:] [quote=引用 5 楼 call_from_dream 的回复:] [quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。[/quote]  struct T {char a, b, c, d, e;} t = {0}; 这样，结构的所有成员都是0了？ 你的依据呢，小朋友？[/quote] int main() { 	struct T 	{ 		int a,b,c; 	} t1={0},t2; 	cout<<t1.a<<t1.b<<t1.c<<endl; 	cout<<t2.a<<t2.b<<t2.c<<endl; 	return 0; } [/quote]  这就是你的依据？我很惊讶。你知道吗，C的实现有符合标准的，也有不符合标准的，还有没跟上标准的。

user: user-3
content: 引用 10 楼 sholber 的回复:[quote=引用 9 楼 a1193561652 的回复:] [quote=引用 5 楼 call_from_dream 的回复:] [quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。[/quote]  struct T {char a, b, c, d, e;} t = {0}; 这样，结构的所有成员都是0了？ 你的依据呢，小朋友？[/quote] int main() { 	struct T 	{ 		int a,b,c; 	} t1={0},t2; 	cout<<t1.a<<t1.b<<t1.c<<endl; 	cout<<t2.a<<t2.b<<t2.c<<endl; 	return 0; }

user: user-0
content: 引用 10 楼 sholber 的回复:[quote=引用 9 楼 a1193561652 的回复:] [quote=引用 5 楼 call_from_dream 的回复:] [quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。[/quote]  struct T {char a, b, c, d, e;} t = {0}; 这样，结构的所有成员都是0了？ 你的依据呢，小朋友？[/quote] 我查了MSDN,发现WNDCLASS 是个结构体。我原先还以为它是个类呢！如果是类，里面还有函数，估计这么初始化就不行了吧？

user: user-2
content: 引用 9 楼 a1193561652 的回复:[quote=引用 5 楼 call_from_dream 的回复:] [quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。[/quote]  struct T {char a, b, c, d, e;} t = {0}; 这样，结构的所有成员都是0了？ 你的依据呢，小朋友？

user: user-3
content: 引用 5 楼 call_from_dream 的回复:[quote=引用 3 楼 a1193561652 的回复:] 定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜[/quote] 就是上面说的wc是局部变量，初始值不确定，如果你不给它赋值谁知道它里面是什么奇奇怪怪的东西，于是就报错了(理论上人品爆表是可以不报错的)。WNDCLASS wc = {0}是申请变量时就就把他初始化（相当于int i=0;类似的），这样wc里面的所有成员都赋值为0了。

user: user-4
content: 如果人你不想设置菜单名的话， 有两种解决办法 1，像楼上说的，置为null 2,在结构体初始化的时候 memset(&wc,0,sizeof(wc));  楼主你试试看  总之，结构体使用前最好初始化一下，习惯

user: user-4
content: wc.lpszClassName = "MyWndClass"; 在这一行下面加上一句 wc.lpszMenuName = "mymenu";  然后就可以运行了  原因是你没有初始化menu，而这在win窗口初始化看来是必须的

user: user-5
content: WNDCLASS wc = {0};  是用于初始化结构体的,   按顺序初始化, 如果个数不足时会全部填写0.  所以 ={0}, 实际就相当于 memset(&wc, 0, sizeof(wc)); 了.

user: user-0
content: 引用 3 楼 a1193561652 的回复:定义窗口类的时候差一个窗口菜单的定义，wc又是局部变量所以初始值不确定，加一个wc.lpszMenuName=NULL;套用星爷电影里的一句台词：我对你的佩服犹如滔滔江水，连绵不绝…… 加一个wc.lpszMenuName=NULL;立马就OK了。 有人刚跟我说，把wc初始化：WNDCLASS wc = {0};这样也OK。wc作为WNDCLASS类的一个对象，里面有很多成员，这么初始化，我感觉很怪。不过，那么做也OK。能告诉我怎么回事吗？//我现在刚学MFC,技术很菜