user-0 提问: 自己尝试写的队列的链式结构操作，没办法调试，哪位大神可以帮忙看看，一调试就自动关闭，一直不知道是什么问题

回复:
user: user-1
content: 全局指针q没有分配内存。

user: user-2
content: 引用 9楼我是你的主体 的回复:[quote=引用 8 楼 qq423399099 的回复:] 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 这个会调试，程序容易崩溃是什么问题[/quote]水平问题

user: user-0
content: 引用 8 楼 qq423399099 的回复:单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 这个会调试，程序容易崩溃是什么问题

user: user-0
content: 引用 10 楼 qq423399099 的回复:[quote=引用 9楼我是你的主体 的回复:][quote=引用 8 楼 qq423399099 的回复:] 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 这个会调试，程序容易崩溃是什么问题[/quote]水平问题[/quote]  太伤心了

user: user-3
content: int *p; //只是定义了一个int指针并没有分配内存 int   i=*p; //这尝试访问一个未知的地方，可能是操作系统所在的内存空间，所以系统会崩溃！  struct  *p; p->data; //这也是一样；

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。如果还是没办法操作，是不是因为程序有误？按了alt+7,还是没什么用

user: user-0
content: 引用 3 楼 zycxnanwang 的回复:我帮你改了一下程序 ，数据结构书上的只是算法，总记得以前数据结构老师说的一句话，用算法写出了程序，算法才算你的 建议你多用算法写程序，看书是学不会数据结构的，还有看你的程序，函数的返回值的概念有点不清晰，可以返回书本看一下 还有就是注意空指针，没有分配内存的空指针，千万别让它指向别的地方，程序崩溃的原因大部分是用了 “”野指针“”  “”没有分配内存的空指针，不要指向其他地方",能具体举个列子吗？我试着写的程序都容易崩溃，可是总是不知道问题出在哪里？

user: user-3
content: 我帮你改了一下程序 ，数据结构书上的只是算法，总记得以前数据结构老师说的一句话，用算法写出了程序，算法才算你的 建议你多用算法写程序，看书是学不会数据结构的，还有看你的程序，函数的返回值的概念有点不清晰，可以返回书本看一下 还有就是注意空指针，没有分配内存的空指针，千万别让它指向别的地方，程序崩溃的原因大部分是用了 “”野指针“”

user: user-3
content: #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct QNode{ 	char data; 	struct QNode *next; }QNode, *QueuePtr;  typedef struct{ 	QueuePtr front; 	QueuePtr rear; }LinkQueue,*LinkQueueP; //定义了结构体指针   //初始化  int initqueue(LinkQueueP &q){ 	q = (LinkQueueP)malloc(sizeof(QNode)); //分配内存空间 	q->front = (QueuePtr)malloc(sizeof(QNode));  	q->rear = q->front; 	if (!q->front) return 0; 	q->front->next = NULL; 	return 1; }   //入队 int enQueue(LinkQueueP q, char e){ 	QNode *p = (QueuePtr)malloc(sizeof(QNode)); 	if (!p) return 0; 	p->data = e; 	p->next = NULL; 	q->rear->next = p; 	q->rear = p; 	return 1; }   //出队 int deQueue(LinkQueueP q, char &e){ 	if (q->front == q->rear) 		return 0; 	QNode *p = q->front->next; 	e = p->data; 	q->front->next = p->next; 	if (q->rear == p) 		q->rear = q->front; //队列已空 	return 1; }  int clearQueue(LinkQueueP q){ //清空队列 	QueuePtr  p, temp; 	if (q != NULL){ 		if (q->front != NULL){ 			p = q->front->next; 			while (p != NULL){//释放队列空间  				temp = p->next; 				free(p); 				p = temp; 			} 			q->front->next = NULL; 			q->rear = q->front; 		} 	} 	return 0; }      LinkQueueP q; int main(){  	initqueue(q);  	enQueue(q, 'I'); 	enQueue(q, 'l'); 	enQueue(q, 'o'); 	enQueue(q, 'v'); 	enQueue(q, 'e'); 	enQueue(q, 'y'); 	enQueue(q, 'o'); 	enQueue(q, 'u');  	char ch; 	deQueue(q, ch); //如果是引用的话，一定要是变量 	printf("%c\n", ch); 	deQueue(q, ch); 	printf("%c\n", ch); 	deQueue(q, ch); 	printf("%c\n", ch); 	clearQueue(q);  	return 0; }

user: user-4
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 引用 3 楼 zycxnanwang 的回复:我帮你改了一下程序 ，数据结构书上的只是算法，总记得以前数据结构老师说的一句话，用算法写出了程序，算法才算你的 建议你多用算法写程序，看书是学不会数据结构的，还有看你的程序，函数的返回值的概念有点不清晰，可以返回书本看一下 还有就是注意空指针，没有分配内存的空指针，千万别让它指向别的地方，程序崩溃的原因大部分是用了 “”野指针“”  “用算法写程序”我不太明白具体是什么样的，我以为都是应该按照书上的一个个写如果把所有的程序都写在main函数中，这样算是标准的数据结构吗？就是把出队、入队、初始化等一系列操作都写在一起，不是需要调用的那样写，对吗？