
Nguyên bản được gửi bởi
kimcy1992
Bạn cho code vào tag cho đúng tiêu chuẩn post bài đi.
http://diendan.congdongcviet.com/showthread.php?t=6131
không hiểu là khai báo mảng tĩnh a[50] rồi bạn lại cấp phát động
a=(int *)malloc(n*sizeof (int)); để làm gì nữa đây. Bỏ cấp phát động đi. Khi cấp phát động thì con trỏ a không con chứa địa chỉ đầu tiên của mảng nữa, mà sẽ chứa địa chỉ ô nhớ đầu tiên của vùng nhớ được cấp phát động, do vậy lúc này nhập dữ liệu cho vùng nhớ vừa được cấp phát chứ không còn cho a[50], in ra toàn số linh tinh ramdom rồi.
Code:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void hamnhap(int *a, int n)
{
int i;
printf("\nDia chi dau tien duoc truyen vao la: a= %p\n",a);
for(i=0;i<n;i++)
scanf("\n%d",&a[i]); //m?ng không duoc khai báo này.
}
void hamin(int a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("\n a[%d]=%d",i,a[i]);
}
main()
{
int a[50];
int i,n=3;
printf("\nPhan tu dau tien cua mang a co dia chi la: a[0]= %p\n",a );
hamnhap(a,n);
printf("\nHien thi cac gia tri vua nhap: ");
printf("\nPhan tu dau tien cua mang a sau khi thoat ham co dia chi la: a[0]= %p",a );
hamin(a,n);
getch();
}
Xem đoạn code này tháy phần khai báo linh tinh nhỉ