无法评估表达式。 Malloc失败了

时间:2012-03-30 20:15:04

标签: c

我在函数中分配结构时遇到问题。这是代码(我目前正在使用visual studio 2008):

    Mat3x3* ProdMat(Mat3x3 *m, Mat3x3 *n)
    {
   if(m == NULL || n == NULL)
   {
      cout << "\t[W] Cannot compute product of the two matrixes one or both are NULL." << endl;
      return NULL;
   }

   Mat3x3 *p; // product
   int i, j;
   float sum = 0;

   p = (Mat3x3*)malloc(sizeof(Mat3x3)); // <= Exp cannot be evaluated

   for(i = 0; i < 3; i++)
   {
    for(j = 0; j < 3; j++)
    {
        sum = 0;

        for(int k = 0; k < 3; k++)
        {
            float a = m->a[i][k];
            float b = n->a[k][j];
            sum += a * b;
        }

        p->a[i][j] = sum;
     }
   }

   return p;
    }

P包含一个包含9个条目的矩阵。以下是给出错误的上下文:

    Mat3x3* compute_final_trans(Trans **transes) // compute product of all   transformation matrixes from right to left
    {
    int k_trans = 0, i, j;
    Mat3x3 *final_trans;

    if(transes == NULL)
    {
    printf("\t[E] Cannot compute sequence of NULL transformations.\n");
    return NULL;
    }

    final_trans = (Mat3x3*)malloc(sizeof(final_trans));

    for(i = 0; i < 3; i++)       // generate eye matrix
    for(j = 0; j < 3; j++)
    {
        if(i == j)
        {
            final_trans->a[i][j] = 1;
        }
        else
        {
            final_trans->a[i][j] = 0;
        }
    }

    while(transes[k_trans++]);

    for(i = k_trans - 2; i >= 0; i--)
    {
    final_trans = ProdMat(transes[i]->matrix, final_trans); // <= ERROR
    }

    return final_trans;
    }

最终trans被初始化为眼睛矩阵,并且在此步骤之前已成功计算了transes(在调用compute_final_trans之前)。 while用于修复transes包含的转换次数。在线:

    final_trans = ProdMat(transes[i]->matrix, final_trans);

ProdMat无法为p分配内存,p是指向Mat3x3结构的指针。 perror表明没有足够的内存来分配给结构。但是我只使用1GB的RAM(总共4GB)。

非常感谢任何帮助/建议/参考。

塞比

1 个答案:

答案 0 :(得分:2)

malloc(sizeof(final_trans))

这很糟糕。您只为指针分配足够的空间,而不是为数组分配空间。