30/09/2018, 16:38
Tại sao con trỏ không trỏ tới mảng động?
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
void inputSequence(int* pt1, int* pt2,int &n1, int &n2)
{
int i,j;
cout << "Hay nhap so phan tu day 1: ";
cin >> n1;
cout << "Hay nhap so phan tu day 2: ";
cin >> n2;
pt1=(int*)calloc(n1,sizeof(int));
pt2=(int*)calloc(n2,sizeof(int));
cout << "Nhap phan tu day 1:" << endl;
for (i=1;i<=(n1);i++)
{
cout << "Hay nhap phan tu thu " << i << endl ;
cin >> pt1[i-1];
}
cout << "Nhap phan tu day 2:" << endl;
for (i=1;i<=(n2);i++)
{
cout << "Hay nhap phan tu thu " << i << endl ;
cin >> pt2[i-1];
}
cout << "Complete" << endl;
}
void printSequence(int* pt, int size)
{
int i;
for (i=0;i<size;i++)
cout << pt[i];
}
int main()
{
int* pt1=NULL;
int* pt2=NULL;
int size1,size2;
inputSequence(pt1,pt2,size1,size2);
printSequence(pt1,size1);
getchar();
getchar();
return 0;
}
bị lỗi ở hàm printSequence, pt1 được cấp phát nhưng sau khi ra khỏi hàm input thì bị mất. Giúp mình với
Bài liên quan
Memory leak rồi…
Sửa như thế nào vậy anh? free 2 con trỏ hả anh?
Mình nghĩ nên làm thế này:
Khi đó con trỏ trong hàm main vẫn kiểm soát được.
phải return về cho con trỏ à
Mình hiểu nhưng ko biết giải thích sao Mình ít làm mấy bài này nên không rõ lắm, thắp nhang thỉnh thánh con trỏ @ltd vào xem thế nào
Con trỏ cũng là một biến kiểu nguyên dùng để lưu 1 con số là địa chỉ đầu của vùng nhớ. Trong kiểu truyền con trỏ vào hàm trên là truyền tham trị, chỉ truyền giá trị bản sao của con trỏ, khi ra khỏi hàm thì con trỏ làm tham số của hàm cũng bị hủy như những biến khác. Return con trỏ trong hàm cho biến khác quản lý đảm bảo hơn. :dizzy_face:
Mình nghĩ ít ai dùng kiểu cấp phát bên trong hàm như thế này (Trừ khi dùng smart pointer) :dizzy_face:
void inputSequence(int*& pt1, int*& pt2,int &n1, int &n2)
{
…
}
Mình nghĩ bạn @nguyenchiemminhvu nói đúng rồi, bạn có thể sửa lại như thế này.
tks @nguyenchiemminhvu và @Domino nhé… mình hiểu sơ sơ rồi. Mình thử làm bằng reference thì đúng thật. Sau đó mình thử bằng cách đặt con trỏ 2 cấp
**pt1
làm thử cũng được. Con trỏ mình truyền vào chỉ gắn với vùng nhớ được cấp phát thôi. Có vẻ phải nghiên cứu thêm thôi