希望你能幫助我,因爲我現在有點絕望。我正在使用線程,我希望他們都修改相同的二維數組。所以我做了一個指向二維數組的指針,但它不起作用。這個是我的代碼指針結構動態二維陣列
typedef struct {
char XY;
int b;
int d;
int f;
int h;
} celdaMatriz;
typedef struct {
int totalX;
int totalY;
celdaMatriz **matriz;
char direction;
int i;
int j;
int cont;
} parameter;
正如你可以看到參數具有變量「celdaMatriz matriz **」(我對西班牙的遺憾在我的代碼)。現在來的函數初始化「celdaMatriz」二維數組
void createMatriz(int totalX, int totalY, celdaMatriz **matriz[totalX][totalY])
{
int i,j;
for(i=0;i<totalX; i++){
for(j=0; j<totalX;j++){
matriz[i][j]->XY=' ';
matriz[i][j]->b=0;
matriz[i][j]->d=0;
matriz[i][j]->f=0;
matriz[i][j]->h=0;
}
}
matriz[0][3]->XY='/';
matriz[2][0]->XY='*';
matriz[2][1]->XY='*';
matriz[0][2]->XY='*';
matriz[2][2]->XY='*';
matriz[1][3]->XY='*';
matriz[3][3]->XY='*';
}
功能createMatriz會發生變化,但是這是想法。所以,現在我的主要功能
int main(int argc,char *argv[])
{
int i,j;
celdaMatriz **matriz = malloc(sizeof (*matriz) * 4);
for (i=0; i < 4; ++i)
matriz[i] = malloc(sizeof (**matriz) * 4);
crateMatriz(4,4,matriz);
parameter *p1,p2;
parameter *p1 = malloc(sizeof(*p1));
p1->totalX=4;
p1->totalY=4;
p1->i=0;
p1->j=0;
p1->cont=0;
p1->direction= 'f';
p1->matriz= matriz;
return 0;
}
所以任何時候我想創建一個新的線程創建一個新的參數變量及其「matriz」變量的指針二維數組我在主函數創建。嗯,至少是這樣的想法,但我得到這些錯誤
的誤差來自createMatrix功能,從main函數的最後一個。順便說一下,我使用的是Linux和C. 謝謝。希望您能夠幫助我。
編輯
我只固定一個錯誤,這個* 從不相容指針類型傳遞 'crearMatriz' 的參數3 [啓用默認] main.c中:59:6:注:預期「結構celdaMatriz *()[(unsigned int)(totaly)]'但參數類型爲'struct celdaMatriz * 已經修復。所以現在的問題是我正在訪問matriz [i] [j] - > XY ='';不正確 希望你能幫助我,因爲我現在有點絕望。我正在使用線程,我希望他們都修改相同的二維數組。所以我做了一個指向二維數組的指針,但它不起作用。這是我的代碼
typedef struct {
char XY;
int b;
int d;
int f;
int h;
} celdaMatriz;
typedef struct {
int totalX;
int totalY;
celdaMatriz **matriz;
char direction;
int i;
int j;
int cont;
} parameter;
正如你可以看到參數具有變量「celdaMatriz matriz **」(我對西班牙的遺憾在我的代碼)。現在到了一個函數來初始化一個「celdaMatriz」二維數組
void createMatriz(int totalX, int totalY, celdaMatriz **matriz[totalX][totalY])
{
int i,j;
for(i=0;i<totalX; i++){
for(j=0; j<totalX;j++){
matriz[i][j]->XY=' ';
matriz[i][j]->b=0;
matriz[i][j]->d=0;
matriz[i][j]->f=0;
matriz[i][j]->h=0;
}
}
matriz[0][3]->XY='/';
matriz[2][0]->XY='*';
matriz[2][1]->XY='*';
matriz[0][2]->XY='*';
matriz[2][2]->XY='*';
matriz[1][3]->XY='*';
matriz[3][3]->XY='*';
}
功能createMatriz會發生變化,但是這是想法。所以,現在我的主要功能
int main(int argc,char *argv[])
{
int i,j;
celdaMatriz **matriz = malloc(sizeof (*matriz) * 4);
for (i=0; i < 4; ++i)
matriz[i] = malloc(sizeof (**matriz) * 4);
crateMatriz(4,4,matriz);
parameter *p1,p2;
parameter *p1 = malloc(sizeof(*p1));
p1->totalX=4;
p1->totalY=4;
p1->i=0;
p1->j=0;
p1->cont=0;
p1->direction= 'f';
p1->matriz= matriz;
return 0;
}
所以任何時候我想創建一個新的線程創建一個新的參數變量及其「matriz」變量的指針二維數組我在主函數創建。嗯,至少是這樣的想法,但我得到這些錯誤
的誤差來自createMatrix功能,並從主函數中的最後一個。順便說一下,我使用的是Linux和C. 謝謝。希望您能夠幫助我。
EDIT
我只固定一個錯誤,這個 * 從兼容的指針類型[默認啓用] 主傳遞 'crearMatriz' 的參數3。c:59:6:note:expected'struct celdaMatriz *()[(unsigned int)(totaly)]'but argument is of type'struct celdaMatriz * 已經修復。所以現在的問題是我正在訪問matriz [i] [j] - > XY ='';不正確
編輯 嗨。我只是想讓你知道我已經找到了解決問題的答案。我不會將指針發送到矩陣,而是將其用作全局變量,這樣所有線程都可以對其進行修改。因此,解決辦法是1-聲明全局celdaMatriz ** matriz
celdaMatriz **matriz;
接下來,我改變了內存分配
matriz = (celdaMatriz **) malloc(4 * sizeof(celdaMatriz *));
for (i = 0; i < 4; ++i)
{
matriz[i] = (celdaMatriz *) malloc(4 * sizeof(celdaMatriz));
}
最後,新的孔隙createMatriz功能:
void crearMatriz(int totalX, int totalY)
{
int i=0,j=0;
for(i=0; i<totalX;i++){
for(j=0; j<totalY; j++){
celdaMatriz *nodo = malloc(sizeof(celdaMatriz));
nodo->b=0;
nodo->d=0;
nodo->f=0;
nodo->h=0;
nodo->casilla=0;
matriz[i+j*totalY]=(celdaMatriz *)nodo;
}
}
matriz[12]->casilla=1;
for(i=0; i<totalX; i++){
for(j=0; j<totalY; j++){
printf(" %d ", matriz[i+j*totalY]->casilla);
}
printf("\n");
}
}
就是這樣。感謝大家誰這個問題
哪一行是59行? – SJuan76
void createMatriz(int totalX,int totalY,celdaMatriz * matriz [totalX] [totalY]) –
@ SJuan76他的代碼大小是正確的,而你的代碼是不正確的。他希望分配四個'celdaMatriz',而不是四個指向指針的指針。您的代碼分配了4個字節的指針大小。 – WhozCraig