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