30/09/2018, 20:21

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
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

Mai Anh Dũng viết 22:23 ngày 30/09/2018

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

Itachi Citus viết 22:33 ngày 30/09/2018

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

Toptal Engineering Blog

Top 10 Most Common C++ Mistakes That Developers Make

C++ is a general purpose programming language that offers great flexibility when it comes to system programming and application development. The language, however, comes with some pitfalls requiring attention from developers to ensure quality...


Learn C++ – 2 Jul 07

Eight C++ programming mistakes the compiler won’t catch

C++ is a complex language, full of subtle traps for the unwary. There is an almost infinite number of ways to screw things up. Fortunately, modern compilers are pretty good at detecting a large num…


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.

Nguyễn Hoàng Trung viết 22:30 ngày 30/09/2018

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

Tình cờ lụm được trên mạng nên chia sẻ ngay cho mọi người smile 1. ( expected: thiếu ‘(‘ 2. ) expected: thiếu ‘)’ 3. , expected: thiếu ‘,’ 4. : expected after private: thiếu ‘:’ sau private 5. : expected after protected: thiếu ‘:’ sau protected 6. : expected after public: thiếu ‘:’ sau public 7. < expected: thiếu dấu < 8. { expected:thiếu dấu { 9. } expected: thiếu dấu } 10. Array bounds missing ]: thiếu ‘]’ bao dãy 11. Array must have at least one element: dãy phải có ít n…

Minh Hoàng viết 22:33 ngày 30/09/2018

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

*grab popcorn* viết 22:29 ngày 30/09/2018

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
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.

case 1:
var i;
//
break; ~> ăn chửi
/////////////////////
case 1: {
var i;
//
break;
} -> không ăn chửi
Mai Anh Dũng viết 22:32 ngày 30/09/2018

1/ Hồi trc hay bị đặt semicolon như thế nàu for(); {} hoặc if(); {}

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

2/ Chưa cấp phát mà đã xài con trỏ ~> Crash

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

3/ Ở phần case, nếu khai báo biến thì phải gom nó vô thành 1 scope.

Chuẩn 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

Đào Văn Lam viết 22:26 ngày 30/09/2018

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 đó :))

Cong Nguyen viết 22:27 ngày 30/09/2018

thiếu ; sau struct hay class.

Mai Anh Dũng viết 22:35 ngày 30/09/2018

thiếu ; sau struct hay class

@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

... viết 22:23 ngày 30/09/2018
int a;
int *p;
p= new int;
p=&a;

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

Mai Anh Dũng viết 22:22 ngày 30/09/2018

really?

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

... viết 22:22 ngày 30/09/2018

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.

Mai Anh Dũng viết 22:29 ngày 30/09/2018

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

Ngô Doãn Tuấn viết 22:27 ngày 30/09/2018

Cảm ơn bạn nhé
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

Sáng Béo viết 22:33 ngày 30/09/2018
int a;
int *p;
p= new int;
p=&a;

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

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

Minh Hoàng viết 22:26 ngày 30/09/2018

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

Khoa Nguyen viết 22:29 ngày 30/09/2018

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

... viết 22:29 ngày 30/09/2018

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.

... viết 22:23 ngày 30/09/2018

à ý 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

Khoa Nguyen viết 22:27 ngày 30/09/2018

à ý 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ì. Thế nên nó mới gọi là lỗi ngớ ngẩn

Thì ý mình cũng vậy mà. Chỉ vòng lập for lần đầu như thế nào thì lần sau nó sẽ viết y như vậy mà không suy nghĩ điều kiện đúng sai ntn

Bài liên quan
0