2013-02-20 87 views
5

EDIT के दौरान 'void *' प्रकार से 'संरचना' को असाइन करते समय असंगत प्रकार - नीचे मतदाता समझा सकते हैं? मेरे पास साक्ष्य के समर्थन, और पूर्व जांच के सबूत के साथ एक स्पष्ट सवाल है। मैं समझना चाहूंगा कि तुम मुझे वोट क्यों दे रहे हो ...?कंपाइलर त्रुटि: malloc


मैं जब मैं जीसीसी के साथ संकलन इस त्रुटि हो रही है:

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

समस्या पंक्तियां हैं:

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

मेरा मानना ​​है कि मैं के रूप में वर्णित, उचित प्रोटोकॉल का पालन किया है here और here। मैं क्या खो रहा हूँ?

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

अब cells एक बहुआयामी सरणी है, जिसकी पहली सूचकांक रेंज लंबाई और दूसरा सूचकांक रेंज है चौड़ाई है:

+1

क्या आप किसी भी मौके से इसे _C++ _ के रूप में संकलित कर रहे हैं? –

+0

क्या आप सी ++ के रूप में संकलित हैं? –

+0

जब तक '~ $ gcc program.c' उबंटू में' g ++ 'नहीं है ... – d0rmLife

उत्तर

6

एक बहुआयामी सरणी के लिए, आप प्रकार struct cell** cells की एक सरणी चाहते हैं।

+0

बढ़िया, संकलक खुश है :) समझ में आता है, समझाने के लिए धन्यवाद। – d0rmLife

+0

कड़ाई से बोलते हुए, एक बहुआयामी सरणी केवल सरणी की एक सरणी है।आप एक डेटा संरचना बना सकते हैं जो पॉइंटर्स की एक सरणी का उपयोग करके एक बहुआयामी सरणी (अधिक लचीलापन और अपनी याददाश्त को प्रबंधित करने की आवश्यकता के साथ) की तरह कार्य करता है। –

+0

@KeithThompson वैकल्पिक डेटा संरचना है जिसे आप एक सरणी का जिक्र कर रहे हैं जो कमांड से परिणामस्वरूप होगा: 'struct cell * cells = malloc (sizeof (struct cell) * लंबाई * चौड़ाई); '? – d0rmLife