2013-02-20 28 views
5

EDIT - người bỏ phiếu có thể giải thích được không? Tôi có một câu hỏi rõ ràng, với bằng chứng hỗ trợ, và bằng chứng về điều tra trước. Tôi muốn hiểu tại sao bạn lại bỏ phiếu cho tôi ...?Lỗi trình biên dịch: các loại không tương thích khi gán cho 'struct' từ loại 'void *' trong malloc


Tôi nhận được lỗi này khi tôi biên dịch với gcc:

error: incompatible types when assigning to type ‘struct cell’ from type ‘void *

Các dòng vấn đề là:

struct cell* cells = NULL; 
    cells = malloc(sizeof(struct cell) * length); 
    for (i = 0; i < length; i++) { 
      cells[i] = malloc(sizeof(struct cell) * width); 

Tôi tin rằng tôi đã theo giao thức thích hợp, như mô tả here và cũng here. Tôi đang thiếu gì?

+1

Bạn có cơ hội biên dịch nó thành _C++ không? –

+0

Bạn có biên dịch thành C++ không? –

+0

Không trừ khi '~ $ gcc program.c' là' g ++ 'trong Ubuntu ... – d0rmLife

Trả lời

6

Đối với một mảng đa chiều, bạn muốn một mảng kiểu struct cell** cells:

struct cell** cells = NULL; 
cells = malloc(sizeof(struct cell*) * length); 
for(int i = 0; i < length; i++) { 
    cells[i] = malloc(sizeof(struct cell)*width); 
} 

Bây giờ cells là một mảng đa chiều, nơi phạm vi chỉ số đầu tiên là chiều dài và phạm vi chỉ số thứ hai là chiều rộng.

+0

Tuyệt vời, trình biên dịch là hạnh phúc :) Làm cho tinh thần, cảm ơn cho giải thích. – d0rmLife

+0

Nói đúng ra, một mảng đa chiều đơn giản là một mảng các mảng.Bạn có thể tạo một cấu trúc dữ liệu hoạt động như một mảng đa chiều (với sự linh hoạt hơn và cần nhiều hơn để quản lý bộ nhớ của riêng bạn) bằng cách sử dụng một mảng con trỏ. –

+0

@KeithThompson Là cấu trúc dữ liệu thay thế mà bạn đang đề cập đến một mảng có kết quả từ một lệnh giống như: 'struct cell * cells = malloc (sizeof (struct cell) * length * width);'? – d0rmLife

Các vấn đề liên quan