首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求解决办法,关于程序发生段异常的有关问题!求好心人帮助1!

2012-02-23 
求解决方法,关于程序发生段错误的问题!!!求好心人帮助1!!小弟在编写一段状态机的程序时发生一个很奇怪的问

求解决方法,关于程序发生段错误的问题!!!求好心人帮助1!!
小弟在编写一段状态机的程序时发生一个很奇怪的问题,由于是新手,不知道问题出在哪里了,希望有好心人帮助一下。。。
  问题就出现在下面一个状态后,一旦输入1后就弹出内存问题:


弹出问题如下:


我已经要吐了,求好心人帮助一下到底问题出在哪里?新手不容易啊。。。

附:代码如下
// sdl.cpp : Defines the entry point for the console application.
//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "stdafx.h"
typedef struct sdltag
{
int state;
int timeout;
}sdl;

int PD= 0;
int isIDRight= 0;
int isHBRej= 0;
int isSupportFrequencyChange= 0;
int isADM_RES= 0;
int isREJ= 0;
int isEMPTY= 0;
int EMPTY_1= 0;
int isACK= 0;
int isLastACK= 0;
int isUL_REP= 0;
int isLastUL_REP= 0;
int isLI_UP= 0;

int main(int argc, char* argv[])
{
int a= 0;
int b1= 0;
int b1_2= 0;
int b2= 0;
int i= 0;
sdl s;
s.state= 0;
s.timeout= 0;
while(1)
{
switch(s.state)
{
case 0:
puts("HM loading, Set(TL1)...\nWaiting for PD(0/1)");
scanf("%d", &PD);
/*TL1 control*/
if(a<32)
{
if(PD)
{
puts("Accept PD...\nisIDRight(0/1), isHBRej(0/1)");
scanf("%d %d", &isIDRight, &isHBRej);
if(isIDRight || isHBRej)
{
printf("Channel %d is unaccessable!\nWaiting for isSupportFrequencyChange(0/1)\n", a);
scanf("%d", &isSupportFrequencyChange);
if(isSupportFrequencyChange)
{
a=a+1;
s.state = 0;
break;
}
else
{
puts("Channel is busy! Waiting for the next access chance\n");
s.state = 0;
break;
}
}
else
{
printf("Channel %d is IDLE, Access Begin, Set(TL2)\n", a);
puts("DLINK Parameter collect over, delete(TL2), Set(TA1),Sending ADM_REQ!\n");
puts("State 0 is over, turn to state 1");
s.state = 1;
break;
}
}
else
{
printf("Channel %d is unaccessable!\nWaiting for isSupportFrequencyChange(0/1)", a);
scanf("%d", &isSupportFrequencyChange);
if(isSupportFrequencyChange)
{
a=a+1;
s.state = 0;
break;
}
else
{
puts("Channel is busy! Waiting for the next access chance\n");
s.state = 0;
break;
}
}
}
else
{
puts("All channels are busy! Waiting for next access!\n");
s.state = 0;
break;
}

case 1:
/*set(T01) T01 control
TA1 control*/
if(b1<3)
{
puts("Sending ADM_REQ...\nwaiting for isADM_RES(0/1), isREJ(0/1), isEMPTY(0/0)");
scanf("%d %d %d", &isADM_RES, &isREJ, &isEMPTY);
if(isADM_RES)
{
for(i=0;i<3;i++)
{
puts("Accept ADM_RES, Sending ADM_ACK, Reset(T01)\nWaiting for EMPTY_1(0/1)");
scanf("%d", &EMPTY_1);
if(EMPTY_1)
{
puts("Accept EMPTY(0,1), Sending DLINK_REPORT\n");
puts("State 1 over, turn to State 2!\n");
s.state = 2;
break;
}
else if(b1_2 <2)
{
b1_2 += 1;
}
else
{
puts("Can not accept EMPTY(0,1),Send HM_REPORT, back to State 0!\n");
s.state = 0;
break;
}
}


}
if(isREJ)
{
puts("Accept REJ, Send REJ_ACK, Send HM_REPORT, Delete(TA1)\nBack to State 0!\n");
s.state = 0;
break;
}
if(isEMPTY)
{
puts("Accept EMPTY(0,0)! Make back off!\n");
puts("Back to State 0 with time back off!\n");
s.state = 0;
break;
}
else
{
puts("Resend ADM_REQ!\n");
b1 += 1;

}
}
else
{
puts("Can not accept ADM_RES, Delete(TA1)\n");
puts("Back to State 0\n");
s.state = 0;
break;

}

case 2:
if(b2 < 3)
{
puts("Send DLINK_REPORT...\nWaiting for isACK(0/1)");
scanf("%d", &isACK);
if(isACK)
{
puts("Accept ACK, Judging for isLastACK(0/1)");
scanf("%d", &isLastACK);
if(isLastACK)
{
puts("Last ACK Accept! Send EMPTY, Set(TA3)\n");
puts("State 2 over, Turn to State 3\n");
s.state = 3;
break;
}
else
{
s.state = 2;
break;
}
}
else
{
puts("Resend DLINK_REPORT\n");
b2 += 1;
s.state = 2;
break;
}
}
else
{
puts("Sending DLINK_REPORT Fail, Stop at here!\n");
s.state = 2;
break;
}

case 3:
/*TA3 control*/
puts("Sending EMPTY...\nWaiting for isUL_REP(0/1)");
scanf("%d", isUL_REP);
if(isUL_REP)
{
puts("Accept ULINK_REPORT, Delete(TA3)\nSend ACK, Set(TA4)\n");
puts("State 3 over, Turn to State 4");
s.state = 4;
break;
}
else
s.state = 3;
break;
case 4:
puts("Accept ULINK_REPORT, Send ACK\n");
puts("Waiting for isLastUL_REP(0/1)");
scanf("%d", isLastUL_REP);
if(isLastUL_REP)
{
puts("Accept Last ULINK_REPORT, Delete(TA4)\nSend ACK, Set(TC1)\n");
puts("State 4 over, Turn to State 10");
s.state = 10;
break;
}
else
s.state = 4;
break;
case 10:
/*TC1 control*/
puts("Accept CMP_REPORT, Delete(TC1)\nSet(T02),Waiting for isLI_UP(0/1)");
scanf("%d", &isLI_UP);
if(isLI_UP)
{
puts("Accept LINK_UPDATE, Delete(T02), Delete(TA1)\n");
puts("Update the parameter!\n");
puts("State 10 over, Turn to State 5 for commuication!\n");
s.state = 5;
break;
}
else
{
s.state = 10;
break;
}
case 5:
puts("game over!\n");
s.state = 11;
break;

default: 
s.state = 0;
puts("Default!");
}
if(s.state == 11)
{
break;
}
}

return 0;
}



[解决办法]
scanf("%d", isUL_REP);
改成
scanf("%d", &isUL_REP);

[解决办法]

C/C++ code
scanf("%d", &isUL_REP);请加入&符号....  我测半小时!好不容易才崩溃 

热点排行