※ 引述《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)