我在函数中分配结构时遇到问题。这是代码(我目前正在使用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)。
非常感谢任何帮助/建议/参考。
塞比
答案 0 :(得分:2)
malloc(sizeof(final_trans))
这很糟糕。您只为指针分配足够的空间,而不是为数组分配空间。