
Nguyên bản được gửi bởi
conga2012
#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);
a=(int *)malloc(n*sizeof (int));
for(i=0;i<n;i++)
scanf("\n%d",&a[i]);
}
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();
}
Khi in ra các giá trị thì bị lỗi, mà mình nhìn thấy chẳng có lỗi nào cả. Ai đó giúp mình đi.
Mình ko rành lắm nhưng bài bạn làm nữa nạc nửa mỡ. Lúc thì *a lúc thì a[]. Có thề compile ko có lỗi nhưng có lỗi run-time về vấn đề cấp phát vùng nhớ. Bạn malloc ở trong hàm nhập hamnhap() khi ra ngoài hàm đó thì coi a chưa được khởi tạo.Vì vậy khi printf ra các giá trị nhập vào thì nó lấy con số nào đó. Theo mình nghĩ bạn nên dùng 1 kiểu * hoặc dùng []. Còn vừa * vừa [] thì nên xài [] sau đó khai báo * gán = [] đó, rồi làm trên *. Như vậy sẽ ít găp tình huống khó hường về *.
-Mình tạm sủa bài của bạn thế này :
p/s: có int or void main() nhé !
Code:
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void hamnhap(int *a, int n)
{
printf("\nDia chi dau tien duoc truyen vao la: a= %p\n",a);
for(int i=0;i<n;i++)
scanf("\n%d",a+i);
}
void hamin(int *a,int n)
{
int i;
for(i=0;i<n;i++)
printf("\n a[%d]= %d",i,*(a+i));
}
int main()
{
int *a = NULL;
int i,n=3;
a=(int *)malloc(n*sizeof (int));
printf("\nPhan tu dau tien cua mang a co dia chi la: a[0]= %p\n",a );
hamnhap(a,n);
printf("\nPhan tu dau tien cua mang a co dia chi la: a[0]= %p\n",a );
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();
}
-Mình chỉ biết vậy thôi. Có gì ko đúng mong mọi người chỉ giáo thêm. Thansk all !