c++运行问题,运行到第92行时直接结束程序,第一次可以运行成功但第二次运行就失败了

#include<iostream>
#include<cstring>
//#define StackMax 100
using namespace std;

typedef struct LinkQueue
{
	struct LinkQueue *next;
	string data;
}LinkQueue,*LinkStack;

typedef struct Queue
{
	LinkQueue *front;
	LinkQueue *rear;
}Queue;

void Stack(Queue &Q,LinkStack &S)//初始化栈和队 
{
	
	Q.front=Q.rear=new LinkQueue;
	
	Q.front->next=NULL;
	
	S=NULL;
	
}

void push(Queue &Q,LinkStack &S)//Q入队,S入栈 
{
	string a;
	bool flag1=true;
	LinkQueue *p;
	p=new LinkQueue;
	int b;

	while(flag1)//队的输入 
	{
		cout<<"1:继续输入	2:结束输入"<<endl;
		cin>>b;
		switch(b)
		{
			case 1:
				cout<<"请在系统中挨个输入你要的内容"<<endl;
				cin>>a;
				p=new LinkQueue;
				p->data=a;
				p->next=NULL;
				Q.rear->next=p;
				Q.rear=p;
				break;
			case 2:
				 flag1=false;
		}
	}

	cout<<"请按照原文再输入一遍"<<endl;

	bool flag2=true;
	while(flag2)//栈的输入 
	{
		cout<<"1:继续输入	2:结束输入"<<endl;
		cin>>b;
		switch(b)
		{
			case 1:
				LinkQueue *q;
				q=new LinkQueue;
				cout<<"请输入需要的数据"<<endl;
				cin>>a;
				q->data=a;
				q->next=S;
				S=q;
				break;
			case 2:
				flag2=false;
		}
		
		
	}	
		
}

void pop(Queue Q,LinkStack S)
{
	cout<<"测试"<<endl;
int i=0;
string t[1000];
LinkStack p; 
printf("链式队列中的元素");
 
if(Q.front->next!=NULL) 
{ 
cout<<"测试"<<endl; 
p=Q.front->next; 
do 
{ 
	t[i]=p->data;
	i++;
	p=p->next; 
}while(p!=NULL); 
}
 
else 
	printf("队列为空\n"); 
	printf("\n"); 
//栈遍历
int f=0;
string d[1000];
LinkStack *q=new LinkStack;
if(q!=NULL)
{
	while(q!=NULL)
	{
		d[1000]=p->data;
		f++;
	}
}

while(f!=0)
{
	if(d[f]!=t[i])
		{
			break;
		}
		i--;
		f--;
}
 
 if(f==0)
 {
 	cout<<"是回文数"<<endl;
 }
 
 else
 {
 	cout<<"不是回文数"<<endl;
 }
 
}

int main()
{
	LinkStack S;
	Queue Q;
	
	Stack(Q,S);
	push(Q,S);
	
	pop(Q,S);
	
	
}

运行pop函数时出现错误

void pop(Queue Q,LinkStack S)
{
    cout<<"测试"<<endl;
    int i=0;
    string t[1000];
    LinkStack p;
    printf("链式队列中的元素");
    if(Q.front->next!=NULL)
    {
        cout<<"测试"<<endl;
        p=Q.front->next;
        do
        {
            t[i]=p->data;
            i++;
            p=p->next;
        }while(p!=NULL);
    }
    else
        printf("队列为空\n");
    printf("\n");
//栈遍历
    int f=0;
    string d[1000];
//    LinkStack *q=new LinkStack;
    LinkStack q = S;             //////////////////// q = S;
    if(q!=NULL)
    {
        while(q!=NULL)
        {
            d[f]=q->data;        /////////////////////
            f++;
            q = q->next;         /////////////////////
        }
    }

    for(int j=0,k=0;j<i&&k<f;j++,k++)       ///////////////输出测试 可删除
        cout<<t[j]<<"/"<<d[k]<<endl;
    while(f!=0)
    {
        if(d[--f]!=t[--i])      ///////////////////////刚开始f和i就要减一下
        {
            break;
        }
//        i--;
//        f--;
    }
    if(f==0)
    {
        cout<<"是回文数"<<endl;
    }
    else
    {
        cout<<"不是回文数"<<endl;
    }
}

出错的地方我标出来了,改过来了。你运行一下看看

pop方法做出栈操作,首先要判断堆栈是否为空。

不为空啊,如果为空92行if应该直接跳过了

可以了感谢大佬

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632