我在C中有一个矩阵,我想创建另一个比第一个矩阵有双行的矩阵。这些添加的行我希望得到第一个矩阵的值,但是符号已经改变了。我想了解动态分配,我不明白我错在哪里。编译器说的错误是:“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;
}
答案 0 :(得分:1)
似乎你有点困惑。让我写一个简短的示例代码
编辑: 好的,转到here
你会找到我的榜样。我还没有完成它,但只是给出了如何完成它的输入。
请注意这一点:
从66到68行我们有这段代码:
for (i = 0; i < rows; i++){
free(first_matrix[i]);
}
这是因为我们矩阵的每个元素都是一个指针,所有这些元素都指向堆上分配的数组。所以,如果你刚刚释放了first_matrix,就像这样:
free(first_matrix);
你只会从堆上的自己内容中释放first_matrix(而不是每个元素中的那个)