DevC++コンパイルパス、実行時プロンプトprocess exited without return value 3222,2225,725

3099 ワード

このような結果は、2つの問題による可能性があります(現在、私は2つしか知らないので、他の人の補充を歓迎します).
1、スタックオーバーフロー、以下のコードを参照
#include
#include
using namespace std;
vector >Graphs;
//vector >visit;
int m = 0, n = 0 , q = 0 ;

int directx[4] = {-1,0,0,1};
int directy[4] = {0,-1,1,0};

struct direct2{
	int x;
	int y;
};

direct2 direction[4] = { (-1,0), (0,-1), (0,1), (1,0) };
int directionx[4] = {-1,0,0,1};
int directiony[4] = {0,-1,1,0};

void fill(int x, int y, char ch)
{
	static int xx = 0, yy = 0;
	Graphs[y][x] = ch;
	for(int i = 0 ; i < 4; ++i)//DFS 
	{
//		xx = x + directionx[i];
//		yy = y + directiony[i];
		xx = direction[i].x + x;
		yy = direction[i].y + y;
		if(xx >= 0 && xx < m && yy >= 0 && yy < n /*&& Graphs[yy][xx] != ch*/  && Graphs[yy][xx] != '|' &&
		 Graphs[yy][xx] != '-' && Graphs[yy][xx] != '+'  )
		{
			fill(xx,yy,ch);
		}
		
	}
	
}

int main()
{

	cin >> m >> n >> q;
	Graphs.resize(n,vector(m,'.'));
	int sign=0, x1=0 , x2=0 , y1=0 , y2=0;
	
	int x=0, y=0;
	char ch = '0';
	
	
	for(int i=1; i <= q; ++i)
	{
		cin >> sign;
		if(sign == 0)
		{
			cin >> x1 >> y1 >> x2 >> y2;
//			cin.get() ;
			if(y1 == y2)
			{
				for(int j = min(x1,x2); j <= max(x1,x2); ++j)
				{
					if(Graphs[y1][j]== '.' || Graphs[y1][j]== '-') 
					{
						Graphs[y1][j]= '-';
					}
					else if(Graphs[y1][j]== '|' || Graphs[y1][j] == '+')
					{
						Graphs[y1][j]= '+';
					}
				}
			}
			if(x1 == x2)
			{
				for(int j = min(y1,y2); j <= max(y1,y2); ++j)
				{
					if(Graphs[j][x1]== '.' || Graphs[j][x1]== '|') 
					{
						Graphs[j][x1] = '|';
					}
					else if(Graphs[j][x1]= '-'  || Graphs[j][x1] == '+')
					{
						Graphs[j][x1]= '+';
					}
				}
			}
	}

		
		else if(sign == 1)
		{
			cin >> x >> y >> ch;
//			cout << ch << endl;
			fill(x,n-y-1,ch);
		}
	}
	
	for(int i = 0; i < n; ++i )
	{
		for(int j = 0; j < m; ++j) 
		{
			cout << Graphs[i][j];
		}
		cout << endl;
	} 
	
	
	return 0;
}

上記コードのfill()関数が再帰的に呼び出された場合、if判定条件の判定Graphs[yy][xx]!=chこの判断コメントが削除されると、無限再帰を招き、スタックオーバーフローを引き起こし、プログラムの実行時にこの問題が発生する(この問題はCCF 201512-3画図で、コードは以下の通りである:https://blog.csdn.net/wingrez/article/details/89047974.その时、私は自分でこの条件を书き漏らして、プログラムの死活报のタイトルの中の结果、それからゆっくりとデバッグする时やっと问题の所在を発见して、元のコードをVSの中に置いて运行する时ヒントを与えます:Stack overflow(パラメータ:0 x 000001,0 x 02 C 2 F 34).0 x 00 AAA 5 A 7に未処理の異常(CCFTTest.exe中):0 xC 00000 FD:Stack overflow(パラメータ:0 x 000001,0 x 02 C 2 F 34)がある.話は本当にこのような試合がどうしてまだ老いぼれたDevC++を使っているのか理解しにくい.運行時に間違いを注意して真かすを注意しなければならないが、やはり従わなければならない.
2、操作初期化されていないポインタ:たとえば、メモリ領域が割り当てられていないポインタを割り当てたり、コピーしたりすると、この問題が発生します.接続を参照:https://zhidao.baidu.com/question/1960014709324954300.html
現在、私はこの2つの状況がタイトルの中に現れることを知っています.もし皆さんが他の問題がこのような現象を引き起こすことを知っていたら、補充を歓迎します.ここで先に謝ります.