Tại sao code bị std::bad_alloc

int *b = new int[n];
for(int i=0;i<n;i++){
	*(b+i)=*(a+i);
}
delete[] a;
a = new int[n-dem];
n = n - dem;
for(int i=0;i<n-dem;i++){
	*(a+i)=*(b+i);
}
delete[] b;
xuatMang(a,n);

Đây là 1 đoạn code em mô phỏng lại hàm realloc bên C++, nhưng khi chạy nó hiện

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Như vậy là sao ạ??

em đưa toàn bộ code đi chứ đọc vậy ko thấy có vấn đề gì :V Ngoài vụ n-dem có thể < 0 @_@

em bật debug lên mà xem nó dừng ở đâu báo lỗi là biết :V

4 Likes

http://codepad.org/mSsReMTw Code của em đây ạ!

Phần đấy em giải phóng a rồi em cấp phát lại a rồi mà, còn b thì sau khi dùng xong em mới giải phóng ở phía cuối!! Hay em nhầm ở phần nào ạ!!???

Code xóa bạn viết sai chỗ tính lại số phần tử. Nên xóa kiểu tự ghi đè ấy.

4 Likes

Em xem lại phần đấy mãi mà chưa ra sai chỗ nào???((

		for(int j = i; j < n; j++){
			*(a+j) = *(a+j+1);
			dem++;
			i--; 
		}

dem ++ trong vòng for này thì nó ra n-j cho 1 phần tử có giá trị = value rồi :V 10 phần tử nó ra 10n luôn rồi tới new[n - dem] thành ra new [-9n] nó báo lỗi còn gì :V

sao em ko ghi a[i] mà ghi *(a+i) nhức mắt vậy :V *(a+j+1) cũng sai nốt nhé vì khi j chạy tới n-1, a[j+1] nghĩa là a[n] là sai rồi :V

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?