1

C に行列があり、最初の行列よりも 2 つの行を持つ別の行列を作成したいと考えています。これらの追加された行には、最初の行列の値が必要ですが、符号が変更されています。動的割り当てを理解しようとしていますが、どこが間違っているのかわかりません。コンパイラが言うエラーはそれです:" invalid conversion from void* to int*"。これが私のコードです:

#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
int *extend_matrix=NULL;
int *matrix=NULL;
int *negative_matrix=NULL;
int main(void)
{
    int i,j,m,n;
    printf("Enter the number of rows and columns of  matrix\n");
    scanf("%d%d", &m, &n);
    int *matrix = (int *)malloc(m * n * sizeof(int));
    int *negative_matrix=(int*)malloc(m*n*sizeof(int));
    printf("Enter the elements of first matrix\n");
    for (  i = 0 ; i < m ; i++ )
        for ( j = 0 ; j < n ; j++ )
            scanf("%d", &matrix[i][j]);
    for(i = 0 ; i < m ; i++)
        for(j = 0 ; j < n ; j++)
            printf("the matrix is: \n",matrix[i][j]);
    negative_matrix=-matrix[i][j];
    for(i=0;i<m+m;i++)
        extend_matrix[i]=realloc(matrix[i],sizeof(int)*(m+m));
    for(j=0;j<n;j++)
        extend_matrix[j]=realloc(matrix[j],sizeof(int)*n);
    extend_matrix[i][j]=matrix[i][j]+negative_matrix[i][j];//how to concatenate them?
    getch();
    return 0;
}
4

1 に答える 1

1

少し混乱しているようです。簡単なサンプルコードを書いてみましょう

編集:わかりました、ここに行きます

そこに私の例があります。私はそれを完了していませんが、それを完了する方法について入力しました。

これにも注意してください:

66 行から 68 行に次のコードがあります。

for (i = 0; i < rows; i++){
    free(first_matrix[i]);
}

これは、マトリックスの各要素がポインターであり、すべてがヒープに割り当てられた配列を指しているためです。したがって、first_matrix を解放した場合は、次のようになります。

free(first_matrix);

ヒープ上の独自のコンテンツから first_matrix のみを解放します (各要素の 1 つではありません)。

于 2013-03-14T10:46:09.413 に答える