Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Câu 5 lab 12

86 views
Skip to first unread message

nam nuyen thanh

unread,
May 9, 2012, 9:42:22 AM5/9/12
to int2202ap
void inputArrayExtend(int*& p,int& n)
{
p=new int[maxSize];
n=maxSize;
int count =0,i=0,*q;
while(cin>>i)
{
if(count>=n)
{
n*=2;
q= new int[n];
for(int i=0;i<n/2;i++)
{
*(q+i)=*(p+i);
}
p=q;
}
*(p+count)=i;
count++;
}
cin.clear();
n = count;
}

Tại sao delete[] q thì giá trị *p và *(p+1) lại bị mất nhỉ ?
Ai giải thích hộ với

Khổng anh thắng

unread,
May 9, 2012, 11:08:39 AM5/9/12
to int2202ap
Bạn ơi khi bạn dùng hàm delete[] q thì toàn bộ dữ lưu trữ của q sẽ bị
mất, mà bạn gán p=q tức là cả 2 đều trỏ đến 1 địa chỉ , thì đương
nhiên cái mà p trỏ đến đã đk giải phóng và *p và *(p+1) đã bị mất .
Cái này trong bài giảng cô cho vd rồi.

Phan Văn Thanh

unread,
May 9, 2012, 11:11:41 AM5/9/12
to int2...@googlegroups.com
c gán p = q mà, tức là p trỏ đến vùng nhớ q đang trỏ---->vùng nhớ này có 2 biến đang trỏ là p và q (k cẩn thận là đánh nhau như chơi, hihi)
sau đó c lại hủy vùng nhớ q trỏ đến -> hủy vùng nhớ của cả 2 mà....c làm lại bài này đi.hì tạo thêm 1 con trỏ lưu tạm nữa là ok

Vào 20:42:22 UTC+7 Thứ tư, ngày 09 tháng năm năm 2012, nam nuyen thanh đã viết:

Nguyễn Thành Nam

unread,
May 9, 2012, 12:32:02 PM5/9/12
to int2...@googlegroups.com
theo lời bạn khổng anh thắng thì toàn bộ dữ liệu của p và q sẽ mất nhưng của mình chỉ mất 2 giá trị *p và *(p+1) thôi. các dữ liệu sau vẫn còn nguyên
còn bạn thanh: delete[] q chỉ hủy vùng nhớ của q thôi vì các giá trị *(p+n) với n>1 vẫn đúng. chỉ có n=0 và 1 là sai nên p ko bị hủy.
các bạn khác cho ý kiến với

Khổng anh thắng

unread,
May 9, 2012, 2:31:03 PM5/9/12
to int2202ap
À mà theo đề bài thì yêu cầu giải phóng cái p cũ chứ, có yêu cầu giải
phóng q đâu ?

Hiệp_K56CC

unread,
May 14, 2012, 6:58:19 AM5/14/12
to int2...@googlegroups.com
cho em hỏi nhập đầu vào với số phần tử lẻ thì phần tử cuối random. có phải in ko ạ

Diep

unread,
May 15, 2012, 3:19:48 AM5/15/12
to int2202ap
Số phần tử lẻ hay chẵn không ảnh hưởng đến kết quả bài toán. Không có
phần tử cuối random đâu nhé.

Nếu ý bạn hỏi là: Người dùng nhập vào
1
3
5
7
9
15
Ctrl+Z
kích thước cấp cho mảng sẽ là 2 * 2 * 2 = 8 thì ta cần in ra 6 phần tử
hay in cả 8? Câu trả lời sẽ là 6.

Message has been deleted

Đàm Đức Nguyện

unread,
May 15, 2012, 9:12:21 AM5/15/12
to int2202ap
có n là số phần tử đc nhập vào nên t nghĩ là chỉ in n số mình đã nhập
thôi

On 15 Tháng Năm, 20:10, Hiệp_K56CC <hiepnm...@vnu.edu.vn> wrote:
> em nhập vào 1 2 3 vì cấp phát những 4 ô nhớ nên ô cuối cùng nó random ạ

Hiệp_K56CC

unread,
May 15, 2012, 9:27:12 AM5/15/12
to int2...@googlegroups.com


nhập xong tớ tăng 1 nên có hiện tượng vậy. chỉnh theo yêu cầu đề rồi.
Reply all
Reply to author
Forward
0 new messages