Cấp phát động trong c++ chạy ở dev c++ và visual studio tại sao khác nhau

em xem bai 40 cua anh ltd va chay chuong trinh trong dev c++ nhung ket qua cua gia tri cua cac phan tu da detele thi khac nhau.Mong moi nguoi giai thich giup em.:slight_smile:
Tu ngay tham gia dien dan em chi toan hoi chu chua giup do ai do trinh do qua kem,em rat la ngai, ko biet trong dien dan co cac muc don gian ko de em jup moi nguoi.

int *arr = new int[x];
dấu ngoặc vuông chứ ko phải dấu ngoặc tròn. Dấu ngoặc tròn new int(x) là “gần” tương đương với 2 dòng:

int *ptr = new int; //ptr trỏ tới 1 số nguyên
*ptr = x;

nếu học tới hướng đối tượng thì em sẽ hiểu T(x) là hàm tạo (constructor) của class T. Nó ko bao gồm 2 dòng như trên mà chỉ gói gọn trong 1 dòng. Ở đây int(x) cũng có thể hiểu là hàm tạo của int.

1 Like

Link tải Unikey bản mới nhất :
http://unikey.vn/vietnam/#nav4

3 Likes

This post was flagged by the community and is temporarily hidden.

???:rolling_eyes:
la sao

cung y nhu vay

em co sua lai nhung ket qua y nhu vay

Bạn đã delete vùng arr thì vùng đó không còn ý nghĩa.

Việc bạn tiếp tục gán giá trị cho vùng nhớ đó dẫn đến Undefined Behavior, giá trị bạn có được là vô tình có được. Bạn sử dụng compiler khác hoặc máy khác hoặc chương trình khác sẽ cho kết quả khác.

2 Likes

delete[] arr; là xóa mảng cũ mà arr trỏ tới, muốn có mảng mới có x+10 phần tử thì phải cấp phát mảng mới cho arr:

delete[] arr;
arr = new int[x+10];
2 Likes

Là viết chữ thì nên có thêm dấu đó bạn…

Là : Làm ơn viết chữ có dấu …giùm :imp:

Em đã phát hiện ra.Visual khi xóa 1 gt thi dc 1 gt mac định nào đó là 123423842 j đó.Còn trong dev-c++ thi gt mặc định cho 1 biến là 0.=>x=0; I=0; I+1 đến khi I=x+10=I+10.Em hiểu như thế có j mọi người chỉ bảo them.Thank mọi người trừ Kulteam

thank bạn.Ko ngờ mình reset ổ c lại nên ko có Unikey.sory.Xin lỗi

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