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 ánLờ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
What will be the output of the following C code?
#include <stdio.h>
void main()
{
int *ptr, a = 10;
ptr = &a;
*ptr += 1;
printf("%d,%d\n", *ptr, a);
}Có lời giảiCâu hỏi(Choose 1 answer)
What is the output of this C code?
#include <stdio.h>
#include <conio.h>
int main() {
int n = 267, *pn = &n;
char* pc = pn;
*pc = 0;
printf("n = %d", n);
return 0;
}Có lời giảiCâu hỏiWhat will be the output of the C program?
int arr[5] = { 2, 3, 5, 4, 7 };
int *ptr = (&arr + 1);
printf("%d %d\n", *(arr + 1), *(ptr - 1));Có lời giảiCâu hỏiCả 41 câu của chủ đề41 câu
Xuất hiện trong 1 bộ đề
Đi tiếp từ đây