Viết hàm cấp phát bộ nhớ và nhập giá trị cho một mảng, trả về con trỏ mảng và số phần tử

#include <stdio.h>
#include <stdlib.h>
int nhapmang (int *a[],int n);
void xuatmang (int *a[],int n);

int main()
{
	int n;
	int *a;
        printf("Nhap so phan tu n:");
        scanf("%d",&n);
	a=(int *)malloc(n*sizeof(int));
	printf("\tNhapMang\n");
	nhapmang(&a,n);
	printf("\tXuatMang\n");
	xuatmang(&a,n);
     
	free(a);
}
int nhapmang (int *a[],int n)
{
	for(int i=0;i<n;i++)
		{
			printf("a[%d]=",i);
			scanf("%d",&a[i]);
		}
        return *a[n];
}
void xuatmang (int *a[],int n)
{
	for(int i=0;i<n;i++)
	{	
            printf("a[%d]=%d\n",i,a[i]);
        }
}

đoan code này khi n=3 thì xuất mảng bình thường khi nó n=4 trở lên thì nhập mảng vẫn bình thường nhưng sau khi nhập lại không xuất ra được !!! mọi người giúp em với ạ !

Print lúc xuất mảng sai nhé. Hàm này bạn truyền con trỏ 2 chiều mà in ra con trỏ 1 chiều. Bạn in ra
a[0][i] hoăc *a[i] nhé

2 Likes

Code bạn lỗi access violation nhé, do bạn dùng 2 con trỏ lẫn lộn nên dẫn đến việc nó trỏ lẫn nhau và không ghi vào địa chỉ bộ nhớ được, bạn nên chỉ khai báo con trỏ a ở phần main thôi, từ đó nó tự động truyền vào 2 hàm nhập và xuất 1 con trỏ tương tự

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?