为矩阵指定一个双指针

时间:2011-08-21 22:31:23

标签: c pointers matrix double

你好我必须为双指针分配一个矩阵我写了这段代码来简化事情。

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];
}

1 个答案:

答案 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(),这意味着您有内存泄漏。]