类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
这是数据结构中的括号匹配练习,编译通过,但是单步运行时当进入initStack函数,运行到52行时再F11就出现一个find source对话框,显示please enter the path for DBGHEAP.C. 大家看看这是什么问题?谢谢!
1 #include<iostream.h>
2 #include <stdio.h>
3 #include<malloc.h>
4 #include<stdlib.h>
5 #define STACKLIST 100
6 #define ADD 10
7
8 struct Stack
9 {
10 char *base;
11 char *top;
12 int stacksize;
13 };
14 int initStack(Stack &S);
15 int push(Stack &S,char e);
16 int pop(Stack &S);
17 void main()
18 {
19 Stack A;
20 initStack(A);
21 char ch=getchar();
22 while(ch!=.)
23 {
24 switch(ch)
25 {
26 case [:
27 case (:
28 case {: push(A, ch); break;
29 case ]: if(*A.top==[) pop(A); break;
30 case ): if(*A.top==() pop(A); break;
31 case }: if(*A.top=={) pop(A); break;
32 default: cout<<"error input!";
33 }
34 ch=getchar();
35 }
36 }
37
38
39 int initStack(Stack &S)
40 {
41 S.base=(char*)malloc(STACKLIST*sizeof(char));
42 if(!S.base) exit(-1);
43 S.top=S.base;
44 S.stacksize=STACKLIST;
45 cout<<"OK!";
46 return 0;
47 }
48 int push(Stack &S,char e)
49 {
50 if(S.top-S.base>=S.stacksize)
51 {
52 S.base=(char *)realloc(S.base,(S.stacksize+ADD)*sizeof(char));
53 if(!S.base) exit(-1);
54 S.top=S.base+S.stacksize;
55 S.stacksize+=ADD;
56 }
57 *S.top++=e;
58 return 0;
59 }
60 int pop(Stack &S)
61 {
62 if(S.top==S.base) return -1;
63 --S.top;
64 for(char *p=S.base;p<=S.top;p++)
65 cout<<*p;
66 return 0;
67 }
网友回答:
发一个没有行号吧。
方便复制到编译器
52 S.base=(char *)realloc(S.base,(S.stacksize+ADD)*sizeof(char));
F11,调试器试图进入
realloc函数内部,realloc库函数没有提供源代码,
所以调试程序希望您告诉它源文件在哪里。
实际上程序没有问题。
(其他库函数也一样,比如后面的realloc和exit)
您可以:
(1)在这里按F10,而不是F11来跳过。
(2)选择“忽略”或者“取消”等,
调试器会显示汇编代码,
然后就可以继续了。
你可以用另一种方法试一试,让程序运行到光标位置,调试工具条上有这一项:->{ }
// Dev C++ 4.9.8.0
#include<iostream>
#include <cstdio>
#include<cstdlib>
using namespace std;
#define STACKLIST 100
#define ADD 10
struct Stack
{
char *base;
char *top;
int stacksize;
};
int initStack(Stack &S);
int push(Stack &S,char e);
int pop(Stack &S);
int main()
{
Stack A;
initStack(A);
char ch=getchar();
while(ch!=.)
{
switch(ch)
{
case [:
case (:
case {: push(A, ch); break;
case ]: if(*A.top==[) pop(A); break;
case ): if(*A.top==() pop(A); break;
case }: if(*A.top=={) pop(A); break;
default: cout<<"error input!";
}
ch=getchar();
}
system("pause");
return 0;
}
int initStack(Stack &S)
{
S.base=(char*)malloc(STACKLIST*sizeof(char));
if(!S.base) exit(-1);
S.top=S.base;
S.stacksize=STACKLIST;
cout<<"OK!\n";
return 0;
}
int push(Stack &S,char e)
{
if(S.top-S.base>=S.stacksize)
{
int off = S.top - S.base; // 添加!!
S.base=(char *)realloc(S.base,(S.stacksize+ADD)*sizeof(char));
if(!S.base) exit(-1);
// S.top=S.base+S.stacksize;
S.top = S.base+off; // 修改!!
S.stacksize+=ADD;
}
*S.top++=e;
return 0;
}
int pop(Stack &S)
{
if(S.top==S.base) return -1;
--S.top;
for(char *p=S.base;p<=S.top;p++)
cout<<*p;
return 0;
}
/*
运行结果:
OK!
{[()[{()}]{}[]]}.
请按任意键继续 . . .
*/
一般情况,我修改的地方如果不修改,
也不会出错。
也就是说,您的程序本身是正确的。
可能是您输入的方法不对。
应该一次输入整个串,包括最后的.,
否则,
ch=getchar();
就会得到回车\n,使 ch == \n,
从而输出: error input!