希望你能帮助我,因为我现在有点绝望。我正在使用线程,我希望他们都修改相同的二维数组。所以我做了一个指向二维数组的指针,但它不起作用。这个是我的代码指针结构动态二维阵列
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