01/10/2018, 15:59

Không chạy chương trình được với 1 số trường hợp lạ

Test thử Dong = 3, Cot = 3 thì chương trình không chạy được, còn các trường hợp khác thì vẫn được, không hiểu nguyên nhân tại sao, nhờ các bạn giải thít hộ mình với.

#include< stdio.h>
#include< conio.h>
#include< stdlib.h>
#pragma warning (disable : 4996)

void NhapMang(int **a, int Dong, int Cot)
{
	for (int i = 0; i < Dong; i++)
	{
		for (int j = 0; j < Cot; j++)
		{
			printf("
a[%d][%d] = ", i, j);
			scanf("%d", a[i] + j);
		}
	}
}
void XuatMang(int **a, int Dong, int Cot)
{
	for (int i = 0; i < Dong; i++)
	{
		for (int j = 0; j < Cot; j++)
		{
			printf("%4d", *(*(a + i) + j));
		}
		printf("
");
	}
}
void HoanDoi(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}
void Them1Dong(int **a, int &Dong, int Cot, int ViTriThem)
{
	int *ArrThem;
	ArrThem = (int *)malloc(Cot * sizeof(int *));

	printf("
Nhap Mang Them Vao: ");
	for (int i = 0; i < Cot; ++i)
	{
		printf("
MangThem[%d] = ", i);
		scanf("%d", &ArrThem[i]);
	}

	//Cấp Phát Bộ Nhớ Tăng Thêm 1 Dòng.
	(int**)realloc(a, (Dong + 1) * sizeof(int *));
	a[Dong] = (int *)malloc(Cot * sizeof(int*));

	for (int i = 0; i < Cot; i++)
	{
		a[Dong][i] = ArrThem[i];
	}
	
	for (int i = Dong - 1; i >= ViTriThem; i--)
	{
		for (int j = 0; j < Cot; j++)
		{
			HoanDoi(*(a[i + 1] + j), *(a[i] + j));
		}
	}
	Dong++;
	free(ArrThem);

}
int main()
{
	int **a;
	int Dong , Cot;

	do {
		printf("
Nhap So Dong Vao: ");
		scanf("%d", &Dong);

		if (Dong < 1)
		{
			printf("
So Dong Nhap Khong Hop Le. Xin Kiem Tra Lai !");
		}
	} while (Dong < 1);

	do {
		printf("
Nhap So Dong Vao: ");
		scanf("%d", &Cot);

		if (Cot < 1)
		{
			printf("
So Cot Nhap Khong Hop Le. Xin Kiem Tra Lai !");
		}
	} while (Cot < 1);

	//Cấp phát bộ nhớ.
	a = (int **)malloc(Dong * sizeof(int));

	for (int i = 0; i < Dong; i++)
	{
		a[i] = (int *)malloc(Cot * sizeof(int));
	}

	//Nhập Xuất Mang.
	NhapMang(a, Dong, Cot);
	XuatMang(a, Dong, Cot);

	
	//Thêm 1 Dòng.
	int ViTriThem;

	printf("
Nhap Vi Tri Them Vao: ");
	scanf("%d", &ViTriThem);

	Them1Dong(a, Dong, Cot, ViTriThem);
	printf("
mang sau khi them la: 
");
	XuatMang(a, Dong, Cot);

	//Xoa Bộ Nhớ.
	for (int i = 0; i < Dong; i++)
	{
		free(a[i]);
	}
	free(a);
	getch();
	return 0;
}
Bài liên quan
0