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 -_-
Bài liên quan
cấp phát mảng động cho 1 kiểu
type
lànew type[n];
nhớ dùng
delete var;
cho 1 biếnvar
vàdelete[] var;
cho 1 mảngvar
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
.Ok. Mình hiểu r, cảm ơn 2 bác nhiều.