你好我必须为双指针分配一个矩阵我写了这段代码来简化事情。
int main (int argc, const char * argv[])
{
int ** matrix;
//// initialize the matrix
matrix = malloc(sizeof(int *)*3);
for (int i=0; i<3; i++)
{
matrix[i] = malloc(sizeof(int)*3);
}
// initialize the 2-d array
int matrixx[][3] = { {1,3,4},{5,3,1},{24,5,1} };
for (int i=0; i<3; i++) {
///good kind of assignment
matrix[i] = &matrixx[i];
}
/// error how i fix it ?
matrix = &matrixx[0][0];
}
答案 0 :(得分:2)
你无法解决它。 matrix
的类型为int **
。 &matrixx[0][0]
的类型为int *
。这些是不相容的。
如果要维护指针数组机制,那么“良好的分配”是正确的方法。但是,你的语法略有错误;它应该是:
for (int i=0; i<3; i++) {
///good kind of assignment
matrix[i] = matrixx[i];
}
此外,您不需要执行此操作的循环:
for (int i=0; i<3; i++)
{
matrix[i] = malloc(sizeof(int)*3);
}
(当你重新分配这些指针时,你会发生内存泄漏,因为@Chris会在下面指出。)当然,除非你打算复制矩阵的内容。在这种情况下,你的方法肯定是错误的。
[另请注意,您并未在任何地方调用free()
,这意味着您有内存泄漏。]