Nói rằng tôi đã có loại này:Có an toàn để tham khảo cấu trúc đang được khởi tạo trong trình khởi tạo của nó không?
struct Bitmap
{
int w, h, *b;
};
Tôi khởi tạo nó như thế này:
int w = 7, h = 4;
struct Bitmap bmp = {w, h, calloc(bmp.w * bmp.h, sizeof(*bmp.b))};
Có đảm bảo rằng trình biên dịch sẽ khởi tạo struct
tuần tự? Tôi có thể chắc chắn rằng vào thời điểm trường bmp.b
đang được khởi tạo, các trường bmp.w
và bmp.h
đã được khởi tạo chưa?
Tại sao thứ tự quan trọng? – chux
BTW, nên chắc chắn rằng sản phẩm được tính toán bằng cách sử dụng 'size_t' math:' bmp.w * bmp.h' -> '(size_t) bmp.w * bmp.h'. – chux
Nếu trường 'bmp.b' đang được khởi tạo trước, thì các trường' bmp.w' và 'bmp.h' chứa rác tại thời điểm khởi tạo' bmp.b', và do đó giống như 'calloc (-542 *) 3546, sizeof (* bmp.b)) 'có thể xảy ra. –