C 使用指针对指针生成整数的动态矩阵

C 使用指针对指针生成整数的动态矩阵,c,arrays,pointers,pointer-to-pointer,C,Arrays,Pointers,Pointer To Pointer,我试图创建一个基于整数指针的动态矩阵,这个变量是动态分配的,但是我在使用它时遇到了一些问题,我不知道我是否使用了错误的东西,但是结果并不像预期的那样。是我做错了什么,还是我没有仔细考虑 void pkn(int n, int k) { int chec = checagemInicial(n,k); if(chec == 1) { return; } int mat[n]; int **resultado = NULL, **newMem;

我试图创建一个基于整数指针的动态矩阵,这个变量是动态分配的,但是我在使用它时遇到了一些问题,我不知道我是否使用了错误的东西,但是结果并不像预期的那样。是我做错了什么,还是我没有仔细考虑

void pkn(int n, int k)
{
   int chec = checagemInicial(n,k);
   if(chec == 1)
   {
       return;
   }

   int mat[n];
   int **resultado = NULL, **newMem;
   int posicoes = 0;
   initiateArray(mat, n);//initialize the matrix with one's


   while(functionthatchecksthings1(mat, n, k) == 0)//this 2 function works no need to worry
   {
       if(functionthatchecksthings2(mat, n , k))
       {//i think the problem might be or here
          newMem = realloc(resultado, ((sizeof(int)*n)+(posicoes*sizeof(int)*n)));
          if(newMem)
          {//or here
                resultado = newMem;  
          } 

          int i = 0;
          for(i; i<n;i++)
          {//or here but don't know where
              resultado[posicoes][i] = mat[i];
          }
          posicoes++;
       }

       somaArray(mat, k, n-1);
   }
   //or in the very least case i'm printing it wrong
   printaArray(resultado, n, posicoes);

   system("pause");

   free_matrix(posicoes, resultado);    
}
void pkn(int n,int k)
{
int chec=checagemInicial(n,k);
如果(chec==1)
{
返回;
}
int mat[n];
int**resultado=NULL,**newMem;
int posicoes=0;
initiateArray(mat,n);//用自己的
while(functionthatchesthings1(mat,n,k)==0)//这2个函数可以工作,无需担心
{
if(检查铰链2(垫、n、k)的功能)
{//我想问题可能在这里
newMem=realloc(resultado,((sizeof(int)*n)+(posicos*sizeof(int)*n));
if(newMem)
{//还是在这里
resultado=newMem;
} 
int i=0;

对于(i;iWhy you's use realloc on this line?
newMem=realloc(resultado,((sizeof(int)*n)+(posicos*sizeof(int)*n)))在这一行之前,你甚至没有分配
resultado
。如果我没有弄错的话,realloc会分配内存空间,就像malloc一样,如果之前没有分配第一个参数,这是正确的,@Troianos77,但是要使
realloc
以这种方式运行,指针必须是空的。你从不初始化
resultado
>当变量(和参数)有意义时,to NULL.in极大地帮助代码的清晰度/可读性和可理解性使用了名称。就它而言,我第一次通读了代码,仍然不知道“n”、“k”、“p”的含义/用法,并且仍然对参数“ar”有点怀疑。“resultado”的总体处理方式不正确。它应该是:resulttadp=malloc(xsizeof(int));如果resultado为NULL,则处理错误,否则退出,例如(inti=0;iWhy您在这行上使用realloc?
newMem=realloc(resultado,((sizeof(int)*n)+(posicoes*sizeof(int)*n)))在这一行之前,你甚至没有分配
resultado
。如果我没有弄错的话,realloc会分配内存空间,就像malloc一样,如果之前没有分配第一个参数,这是正确的,@Troianos77,但是要使
realloc
以这种方式运行,指针必须是空的。你从不初始化
resultado
>当变量(和参数)有意义时,to NULL.in极大地帮助代码的清晰度/可读性和可理解性使用了名称。就它而言,我第一次通读了代码,仍然不知道“n”、“k”、“p”的含义/用法,并且仍然对参数“ar”有点怀疑。“resultado”的总体处理方式不正确。它应该是:resulttadp=malloc(xsizeof(int));如果resultado为NULL,则处理错误,否则退出,例如(int i=0;i
void printaArray(int **ar, int n, int p)
{
    int i = 0, j;
    for(i; i < p; i++)
    {
        j = 0;
        for(j; j < n; j++)
        {
            printf("%d ",(ar[i][j]));
        }
        printf("\n");
    }

    printf("%d\n", p);
}