01/10/2018, 17:31

Nối mảng trong C++ ra giá trị rác

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<time.h>

> Blockquote
using namespace std;
void inputA(int *ptr, int);
void inputB(int *ptr, int);
void sapXep(int *ptr, int );
void output(int *ptrA, int *ptrB, int);
void swap(int,int);
void gopMang(int*, int*, int,int);

> Blockquote
int main()
{
	int n;
	cout << "Enter n:";
	cin >> n;
	int *ptrA = new int(n);
	int *ptrB = new int(n);
	inputA(ptrA,n);
	sapXep(ptrA,n);
	inputB(ptrB,n);
	sapXep(ptrB,n);
	output(ptrA,ptrB,n);
	int m = n*2;
	ptrA = (int*)realloc(ptrA,m);
	gopMang(ptrA,ptrB,n,m);
	sapXep(ptrA,m);
	cout<< "Mang sau khi gop:";
	for(int i=0;i<m;i++){
		cout << *(ptrA+i)<<" ";
	}
	return 0;
}

> Blockquote
void inputA(int *ptr, int n)
{
	srand(time(NULL));
	for(int i=0;i<n;i++){
		*(ptr+i)=rand()%101;
	}	
}
void inputB(int *ptr, int n)
{
	srand(time(0));
	for(int i=0;i<n;i++){
		*(ptr+i)=rand()%100;
	}
}

> Blockquote
void swap(int *a, int *b)
{
	int temp;
	temp = *a;
	*a= *b;
	*b = temp;
}
void output(int *ptrA,int *ptrB, int n)
{
	cout << "Array A: ";
	for(int i=0;i<n;i++){
		cout << *(ptrA+i)<<" ";
	}
	cout<<endl;
	cout << "Array B: ";
	for(int i=0;i<n;i++){
		cout <<*(ptrB+i)<<" ";
	}
	cout<<endl;
}


void sapXep(int *ptr,int n)
{
	for(int j=0;j<n;j++){
		for(int k=j+1;k<n;k++){
			if(*(ptr+j)>*(ptr+k)){
				swap((ptr+j),(ptr+k));
			}
		}
	}
}


void gopMang(int *ptrA,int *ptrB, int n, int m)
{	int j=0;
	for(int i=n;i<m;i++){
		*(ptrA+n) = *(ptrB + j);
		j++;
	}
}

Mình random 2 mảng A, B có n phần tử, sau đó realloc A thêm n phần tư nữa. Nhưng sau khi nối 2 mảng thì lại in ra giá trị rác.@@, Ai chỉ mình sai chỗ nào đc k?
Thanks a lot.
Ai thấy khó đọc code mình xin lỗi nhé. Chưa up bài lên bh cho nên k biết chèn code sau cho đúng -_-

Nguyễn Nam viết 19:43 ngày 01/10/2018

cấp phát mảng động cho 1 kiểu typenew type[n];
nhớ dùng delete var; cho 1 biến vardelete[] var; cho 1 mảng var

rogp10 viết 19:32 ngày 01/10/2018

int *ptrA = new int(n)

Cú pháp đúng là new int[n] thì mới ra n slot mem. Viết ntn thì *ptrA chỉ là 1 slot mem mang giá trị là n.

Harry Stormborn viết 19:42 ngày 01/10/2018

Ok. Mình hiểu r, cảm ơn 2 bác nhiều.

Bài liên quan
0