2013-03-03 69 views
1

我在C中有一個矩陣,我想創建另一個具有比第一個矩陣更多的雙行的行。添加的行我希望具有第一個矩陣的值,但改變了符號。我想了解動態分配,並且我不明白我錯在哪裏。該編譯器說的錯誤是:」 invalid conversion from void* to int*"這裏是我的代碼:在C中的擴展矩陣

#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

有多個問題中解脫出來僅first_matrix您碼。你在說'int * matrix',然後把它稱爲'matrix [i] [j]'。這是行不通的。你想達到什麼目的? – cnicutar 2013-03-03 21:30:37

+0

在將矩陣聲明爲int *矩陣之後,矩陣[i] [j]'似乎很討厭,它甚至不應該編譯。至於連接:它取決於你的矩陣是如何佈局的 - 你可以使用你自己的循環或簡單的'memcpy()'。 – 2013-03-03 21:30:54

+1

我在說int *矩陣,但是我怎樣才能給它添加值呢?我不知道。 – Viva 2013-03-03 21:33:00

回答

1

好像你是一個有點困惑讓我寫一個簡短的示例代碼

編輯: 好吧,去here

在那裏,你會發現我的例子中,我沒有完成,但只是就如何完成它的輸入

注意這一點,也:。

從66到68行中,我們有這樣的代碼:

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

這是因爲我們的矩陣的每個元素是一個指針和所有它們指向在堆上分配的陣列。所以,如果你剛剛釋放first_matrix,像這樣:

free(first_matrix); 

你會從它自己的內容在堆上(而不是它的每一個元素中的一個)