2015-11-27 132 views
-1

我在代碼塊上寫了一些c代碼。它在Windows 上工作得很好,但在Linux上出現了分段錯誤。爲什麼?c程序在windows上運行linux上的segmantation故障

這是主要的。我用3個庫和opencells方法調用遞歸方法。

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 


int main(int argc , char *argv[]) 
{ 
    srand(time(NULL)); 
    int size=atoi(argv[1]),trial=atoi(argv[2]);  //! program basladıgında gelen argumanlar 
    int i,j;     //! dongu degişkenleri 
     int **matrix = (int **)malloc(size * sizeof(int));   //!matriksin 1 boyutunu dinamik olarak yarattık 
     int *counters = (int *)malloc(trial * sizeof(int));   //! buda counterları tutcagımız array 

      for (i=0; i<size; i++) 
       matrix[i] = (int *)malloc(size * sizeof(int)); //! 2. boyutada yarattık 

     for(i=0;i<size;i++) 
      for(j=0;j<size;j++) //! matrixsi sıfırla saçma sapan degerler geliyo yoksa 
       matrix[i][j]=0; 

      for(i=0;i<trial;i++) 
      { 
        counters[i]=opencells(matrix,size); //!Random kapı açan ve bunun sayısını donduren fonksyon 
      } 
      printboard(matrix,size,trial,counters); //!Output.txtye yazdır 
      for (i=0; i<size; i++) 
       free(matrix[i]); //! ramden aldıgımız yerleri sal gitsin 
      free(matrix);   //! bosu bosuna makinayı zorlamayalım 
    return 0; 
} 
+1

你知不知道你在哪裏得到的段錯誤? – Arc676

+0

創建一個核心轉儲,以便您可以看到段錯誤中的命令結果。沒有這個,這是一個_guessing遊戲_。 – arkascha

+0

noı在gcc -o main.c main命令行上運行它,然後./main 10 100它只是表示seg錯誤 – asdasdasd

回答

3
int **matrix = (int **)malloc(size * sizeof(int)); 

變化:(INT),與(int *)

int **matrix = (int **)malloc(size * sizeof(int*)); 

因爲的sizeof(INT)和sizeof(INT *)可能不同,所以你的程序可能崩潰時訪問不分配內存。

+0

謝謝你int *做過的魅力 – asdasdasd

+0

不要在C中投出'void *'! C不是C++。你沒有真正解釋OP做錯了什麼。 – Olaf

0
int **matrix = (int **)malloc(size * sizeof(int)); 

您在這裏分配錯誤的內存量。你想sizeof(int*),但你做sizeof(int)

在windows上,int和int *都是32位大的。在Linux上,這可能會有所不同,從而導致您的程序在訪問未分配的內存時發生分段錯誤。

1
int **matrix = (int **)malloc(size * sizeof(int)); 

變化:(int)(int*)

int **matrix = (int **)malloc(size * sizeof(int*)); 

雖然釋放內存,然後使用

free(matrix[i]); 
free(counters); 
相關問題