назначить двойной указатель на матрицу - PullRequest
0 голосов
/ 22 августа 2011

привет, я должен назначить матрицу двойному указателю. Я написал этот код для упрощения вещей.

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 Ответ

2 голосов
/ 22 августа 2011

Вы не можете это исправить. Тип 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(), что означает утечку памяти.]

...