01/10/2018, 15:07

Khai báo cấp phát động cho mảng thì chương trình bị stop, còn khai báo mảng tĩnh chương trình lại chạy được

Nhap vao 2 mang 1 chieu,xoa tren 2 mang nay tat ca cac phan tu trung nhau

#include <stdio.h>
#include <stdlib.h>
void ImportArr(int a[], int n);
void ExportArr(int a[], int b[], int n);
void DelArr(int a[], int &n, int position);
void Funtion(int a[], int b[], int &n);
int main()
{
	int n;
	printf("Enter elements: ");
	scanf("%d", &n);
	//int a[12], b[20]; 
	int *a = (int *) malloc(n);
	ImportArr(a, n);
	int *b = (int *) malloc(n);
	ImportArr(b, n);
	//ExportArr(a, b, n);
	Funtion(a, b, n);
	//free(a);
	//free(b);
	return 0;
}
void ImportArr(int a[], int n)
{
	printf("Enter Arr :");
	for(int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
	}
}
void ExportArr(int a[], int b[], int n)
{
	printf("
Arr A:");
	for(int i = 1; i <= n; i++)
	{
		printf("%4d", a[i]);
	}
	printf("
Arr B:");
	for(int i = 1; i <= n; i++)
	{
		printf("%4d", b[i]);
	}
}
void DelArr(int a[], int &n, int position)
{
	for(int k = position + 1; k <= n; k++)
	{
		a[k - 1] = a[k];
	}
	
}
void Funtion(int a[], int b[], int &n)
{
	for(int i = 1; i <= n; i++)
	{
		for(int j =1; j <=n; j++)
		{
			if(a[i] == b[j])
			{
				DelArr(a, n, i);
				DelArr(b, n, j);
				n--;
			}
		}
	}
	printf("
Arr A & B when deleted: ");
	ExportArr(a, b, n);
}
Dark.Hades viết 17:16 ngày 01/10/2018

malloc(n);

malloc(n*sizeof(int));
Đạt viết 17:15 ngày 01/10/2018

hóa ra laft do vậy, e tưởng chỉ khai bao số byte là dc

rogp10 viết 17:20 ngày 01/10/2018

n không phải là số byte đâu.

BonGarçon viết 17:08 ngày 01/10/2018

Bạn phải cấp phát bộ nhớ động cho con trỏ mảng có n phần tử với kích thước mỗi phần tử là 4 bytes (kiểu int)

Bài liên quan
0