Những lỗi ngớ ngẫn mà mọi người đã gặp khi lập trình C++

Hiện giờ mình đang làm với anh Đạt khóa học lập trình C++, cần tham khảo một số lỗi lập trình khi học tập hay khi làm việc với C++. Các lỗi này sẽ giúp cho khóa học tốt hơn, hy vọng mọi người sẽ tham gia :smile:
Ví dụ trước:

Tại sao mình không thể khai báo như sau:
B* p1, p2;
p1 = new B(); //đúng
p2 = new B(); // sai
Do khi khai báo B* p1, p2; .p1 là con trỏ trỏ đến B, p2 là một đối tượng B.

Các câu hỏi tổng hợp được: https://docs.google.com/document/d/1nMi2swT_EBP1DPq5qfylvE-VeUm74ee9dOVMi-Ct220/edit#heading=h.bfnnm3l0osb0

6 Likes

Hoàng đưa thêm danh sách những câu hỏi em đã soạn len xem thử mọi người có nhận xét gì không :smile:

1 Like

Trên mạng có khá nhiều bài tổng hợp, ví dụ như:



http://alumni.cs.ucr.edu/~nxiao/cs10/errors.htm

Hồi trước code C++ toàn bị dính lỗi:

if (a = b)
   //

Giờ không biết ide có thông minh hơn chưa.

4 Likes

101 lỗi luôn anh, tha hồ làm :smiley:

3 Likes

Đã update một số câu hỏi, mọi người cho nhận xét nhé :smiley: cảm ơn

2 Likes

1/ Hồi trc hay bị đặt semicolon như thế nàu for(); {} hoặc if(); {}
Thế là nó cứ chạy ngon ơ mà chả biết tại sao sai kq :sweat_smile:
2/ Chưa cấp phát mà đã xài con trỏ ~> Crash
3/ Ở phần case, nếu khai báo biến thì phải gom nó vô thành 1 scope. :slight_smile:

case 1:
var i;
//
break; ~> ăn chửi
/////////////////////
case 1: {
var i;
//
break;
} -> không ăn chửi
8 Likes

Cái ví dụ này hay, nên thêm vào này @Rok_Hoang :slight_smile:

Cái này cho vào phần con trỏ, @nguyenchiemminhvu

Chuẩn :thumbsup: Lần trước Đạt làm videos không biết có nói tới chỗ này không, nhung đây là một điểm rất hay, Vũ note lại nhé.


Thanks mọi người, Videos này Đạt muốn làm chất lượng hơn để người học tiếp cận vấn đề dễ hơn :smiley:

6 Likes

IDE giờ vẫn chưa thông minh hơn nha anh, bằng chứng là em vẫn còn dính cái lỗi ngớ ngẫn đó :))

1 Like

thiếu ; sau struct hay class.

2 Likes

@Rok_Hoang thêm cái này vào nhé, anh cũng hay nhắc mọi người cái này

1 Like
int a;
int *p;
p= new int;
p=&a;

Lỗi này gặp khá thường xuyên ở newbie :dizzy_face:

really?

Anh chưa bị lỗi này bao giờ, nhưng có vẻ hợp lý :slight_smile:

Cái này chủ yếu là do thói quen thôi anh. Cứ thấy người ta viết cú pháp cấp phát đúng là cũng bắt chước viết theo.
Mấy đứa ở trường em cũng bị 1 thói quen là khi học thầy cô hay dùng vòng lặp for

for(int i = 0; i < n; i++) {
}

từ đó, bọn nó cứ code đến vòng lặp for là cũng

for(int i = 0; i < n; i++) {
}

mà không nghĩ xem vòng for cần chạy từ giá trị nào đến giá trị nào, hay là cái biểu thức điều kiện trong for cần đặt như thế nào mà cứ là i < n miết.

1 Like

Vậy lúc dạy for anh sẽ nhắc về vấn đề này.

Cảm ơn bạn nhé :smiley:
Ngoài những synax error này ra. Hy vọng bạn sẽ đóng góp những lỗi logic khác hay một số kinh nghiệm xương máu mà bạn đã từng gặp :joy:

e thấy cái này có sai đâu ạ?
e test thử thì vẫn chạy ok mà a.

Lỗi này chắc là lỗi ngữ nghĩa.

Cái này chính xác với tất cả ngôn ngữ

Không sai về cú pháp nhưng nó sai như thế này:

Thuộc về lỗi chưa hủy vùng nhớ mà đã trỏ đến quản lý vùng địa chỉ khác.

1 Like

à ý em là em thấy mấy đứa học trường em nó bị thầy cô áp đặt tư duy ấy anh. Cứ đến đoạn cần dùng vòng lặp for là cứ cho i chạy từ 1 đến n mà lại không nghĩ xem chạy từ 1 đến n để làm gì.
Ví dụ trong khi bài toán chỉ cần như thế này:

for(int i = 0; i < n; i += 2) {
 
}

thì vì thói quen nên lại viết thành

for(int i = 0; i < n; i++) {
 
}

Thế nên nó mới gọi là lỗi ngớ ngẩn :sweat_smile:

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