int *ptr = malloc( sizeof( int ) ); To reallocate ptr to be an array of 5 elements, which of the following statements generates an error?

5 phương ánCó giải thích

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "ptr += malloc( 5 * sizeof( int ) );". Lệnh này sai ngay từ lúc dịch vì phép cộng trên con trỏ chỉ chấp nhận một bên là con trỏ và bên kia là số nguyên; ở đây cả hai bên đều là con trỏ, malloc trả về một con trỏ void, nên biểu thức không có nghĩa và trình biên dịch báo toán hạng không hợp lệ. Ý tưởng ấy còn sai về bản chất: muốn nới một vùng nhớ đã cấp thì phải gọi realloc, chứ không phải dịch con trỏ đi đâu đó. Ý "ptr = realloc( ptr, 5 * sizeof(int) );" là cách viết đúng chuẩn, dịch được và chạy đúng. Ý "realloc( ptr, 5 * sizeof(int) );" vẫn dịch được, chỉ bỏ mất con trỏ mới trả về nên tiềm ẩn rò rỉ và con trỏ treo, nhưng đề hỏi lệnh gây lỗi nên nó không phải lựa chọn. Ý "realloc( ptr, 20);" cũng dịch được, chỉ là ghi cứng số byte. Ý "ptr = realloc( ptr, 20);" dịch được và chạy đúng khi int chiếm 4 byte.

Cùng phần 5

Xuất hiện trong 1 bộ đề