Tôi đang nghiên cứu bài kiểm tra của mình trong C và tôi đang đọc trong bản tóm tắt C mà tôi đã tải xuống từ một số trang web. Nó được viết rằng nó không được phép viết arr[i]
trong đó i
là một biến. Cách duy nhất để làm điều đó là với malloc.
Tuy nhiên, tôi đã viết đoạn code sau đây và nó biên dịch mà không cần cảnh báo và không có lỗi trên valgrind:Khai báo một mảng có biến kích thước không cố định
int index = 5;
int a4[index];
a4[0] = 1;
a4[1] = 2;
int index2;
scanf("%d",&index2);
int a5[index2];
a5[0] = 1;
a5[1] = 2;
Vì vậy, sự thật đằng sau tờ khai mảng là gì? cảm ơn bạn!
Cảnh báo: Tôi khuyên bạn không nên tin tưởng tóm tắt về C được tìm thấy trên Internet quá nhiều; Gần đây tôi đã dành rất nhiều thời gian xem xét C và C++ để chuẩn bị cho các cuộc phỏng vấn và thấy rằng hầu hết các "hướng dẫn nghiên cứu" trên Internet đều có thông tin không chính xác hoặc gây hiểu lầm trong đó. Tôi khuyên bạn nên [một cuốn sách giới thiệu tốt] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list), với báo trước rằng những cuốn sách đó thường không bao gồm C99 các tính năng vì chúng ít được triển khai phổ biến hơn. –
Mặc dù chúng hợp pháp trong C99, VLA là * cực kỳ * nguy hiểm trừ khi bạn đã có một giới hạn rất nhỏ về giá trị của biểu thức được sử dụng làm kích thước mảng. Họ có thể dễ dàng dẫn đến tràn ngăn xếp (không phải là loại tốt :-) và clobbering bộ nhớ heap. –