看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《hubuki (瓶子)》之銘言: : #include<stdio.h> : #include<stdlib.h> : typedef struct : { : int comunityx; : int comunityy; : int x; : int y; : char type; : int year; : } robot; : typedef struct : { : robot **group; : } comunity; : int main() : { : int x, y, k, s; : comunity **com; : comunity a; : int bigi, i, j, smalli, smallj; : int comx, comy, gx, gy, year; : char type; : while(scanf(" %d%d%d%d", &x, &y, &k, &s) == 4) : { : com = (comunity **)malloc(x * sizeof(void*)); // 更正 : 為 com 配置 x 個指向comunity型態變數的指標 com = (comunity **)malloc(x * sizeof(comunity*)); ↓之前配置了 x 個指標, 你這裡配 y 條記憶體給他? : for(i = 0; i < y; i ++) : com[i] = (comunity *)malloc(y * sizeof(comunity*)); // 更正 : 迴圈執行次數為 x 次 for(i = 0; i < x; i++ ) // 更正 : 配置 y 個comunity變數給指標 com[i] com[i] = (comunity *)malloc(y * sizeof(comunity)); : for(i = 0; i < x; i ++) : for(j = 0; j < y; j ++) : { : com[i][j] = malloc(sizeof(comunity)); ↑因為 com[i][j] 是一個 comunity 變數, 不是指標, 所以不要再配置記憶體給他. : com[i][j].group = (robot **)maloc(k * sizeof(void*)); // 更正 : 為 com[i][j] 這個變數擁有的group成員配置 // k 個指向 robot 型態變數的指標 com[i][j].group = (robot **)maloc(k * sizeof(robot*)); ↓配了 k 個指標, 你迴圈配 ↓(2*k-1) 條記憶體給他? : for(smalli = 0; smalli < (2*k-1); smalli ++) : com[i][j].group[smalli] = (robot*)malloc((2*k-1) * : sizeof(robot*)); // 更正 : 迴圏執行次數為 k 次 for( smalli = 0; smalli < k; smalli++ ) // 更正 : 為group[smalli] 配置(2*k-1) 個robot變數 com[i][j].group[smalli] = (robot*)malloc((2*k-1) * sizof(robot) ); : for(smalli = 0; smalli < k; smalli ++) : for(smallj = 0; smallj < (2*k-1); smallj ++) : com[i][j].group[smalli][smallj] = : (robot*)malloc(sizeof(robot)); ↑ group[smalli][smallj] 是一個 robot 變數, 不是指標, 不要配置記憶體給他 : } // 記得釋放記憶體 for( i = 0; i < x; ++i ) { for( j = 0; j < y; ++j ) { for( smalli = 0; smalli < k; ++smalli ) free( com[i][j].group[smalli] ); free( com[i][j].group ); } free( com[i] ); } free( com ); : } : return 0; : } : 抱歉程式碼有點長,標色的是錯的地方 : 錯誤訊息都是 incompatible types in assignment : 我想了好久還是不知道為什麼... : 請板上的強者們救救我吧> < 請注意正常的情況下 : int *p = (int*)malloc( sizeof(int) ); (1) (2) (3) A. (1) & (2) 型態是相等的, B. (2) 的型態比 (3) 的形態還要多一個星星 如果以上的情況有任一不符合, 你可能正在使用很危險的指 標轉型而不自知 -- ╭───╮ ╭╮ ╭╮ 非常非常善良的你 ╭──╯ 非常我的你 ──╮╭──╮│──╯╭─╮╭──── ────────── ──╮│╭╮│╰─╮╭─╯│╭╭╮ 曾一瞬間展露笑容的你 ╭──╯╰╯│ │ ─╯╰╯││││ 曾接受我心意的你 ───╯╰──╯ ╯╰─╯╰╰╯ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (10/05 02:26)