em Demo thêm 1 vd cũng liên quan đến hàm realloc cho rõ hơn .
Vd : như sau (em dung VS C++ , máy anh chỉ việc copy chạy ,Test)
Hàm 1 : Viết một chương trình tìm X trong mảng động 1 chiều bằng phương pháp cầm canh .
Ham 2 : kiểm tra xem mảng có tăng dần hay ko ?
Giải thuật cầm canh là phải thêm 1 phần tử cuối cùng tức a[n]=x , nên ta cấp phát thêm cho nó = realloc là n+1 phần tử phải ko ạ .
Sau khi làm xong thì ta phải xóa phần tử đó đi cho nó trở lại mảng ban đầu đúng ko ? (Nếu ko xóa nó sẽ ảnh hưởng đến bài sau , như vd này ).
Nếu như em để trong hàm timx ở dưới cùng là
Code:
a=(int *)malloc(n*sizeof(int));
thì chương trình chạy đúng ,
ngược lại để realloc thì chương trình chạy sai .
Nhưng theo như thấy mih nói là nếu muốn cấp phát lại thì phải dùng realloc , còn malloc là cấp phát lại từ đầu ( nghĩa là mảng sẽ bị xóa hết ) .
Hic hic , nhưng chương trình chạy thì ngược lại ko hiểu sao ? Pác nào hiểu kĩ vấn đề này chỉ em với .
và đây là code :
Code:
// TestThucHanh.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdlib.h"
void nhapmang(int *&a,int &n);
void xuatmang(int *a,int n);
void timx(int *&a,int n,int &x);
int kiemtra(int *a,int n);
int main(int argc, char* argv[])
{
int *a;
int n,x;
nhapmang(a,n);
printf("\nMang sau khi nhap :\n");
xuatmang(a,n);
timx(a,n,x);
if(kiemtra(a,n)==0)printf("\n\nMang khong tang dan .");
else printf("\n\nMang tang dan . ");
return 0;
}
//-------------------Nhap Mang------------------
void nhapmang(int *&a,int &n)
{
printf("Nhap n : ");
scanf("%d",&n);
a=(int*)malloc(n*sizeof(int));
if(a==NULL)
{
printf("\n Khong cap phat duoc .");
exit(0);
}
for(int i=0;i<n;i++)
{
printf("Nhap a[%d] = ",i);
scanf("%d",&a[i]);
}
}
//--------------------Xuat Mang------------------
void xuatmang(int *a,int n)
{
for(int i=0;i<n;i++)
printf("\t%d",*(a+i));
}
//--------------------Cam Canh-------------------
void timx(int *&a,int n,int &x)
{
n++;
a=(int*)realloc(a,n*sizeof(int));
printf("\nNhap X : ");
scanf("%d",&x);
a[n]=x;
for(int i=0;a[i]!=x;i++);
if(i==n)printf("\nKhong tim thay %d .",x);
else printf("\nVi tri %d trong mang la %d .",x,i);
n--;
//a=(int *)realloc(a,n*sizeof(int));
a=(int *)malloc(n*sizeof(int));
}
//--------------------Kiem tra Mang co tang khong------------------
int kiemtra(int *a,int n)
{
for(int i=0;i<n;i++)
if(a[i]>a[i+1])return 0;
return 1;
}