C程序在Windows上工作,在Linux上出现隔离错误



我在代码块上写了一些c代码。它在Windows上运行良好但在 Linux 上给出了隔离错误。为什么?

这是主要的。我使用了 3 个库和 opencell 方法调用递归方法。

#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;
}
int **matrix = (int **)malloc(size * sizeof(int));
更改: (int(

到 (int*(

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

因为 sizeof(int( 和 sizeof(int*( 可能不同,所以您的程序在访问未分配的内存时可能会崩溃。

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

更改:(int)(int*)

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

在释放内存的同时,使用

free(matrix[i]);
free(counters);
int **matrix = (int **)malloc(size * sizeof(int));

您在此处分配了错误的内存量。你想要sizeof(int*)但你sizeof(int).

在 Windows 上,int 和 int* 都是 32 位大。在 Linux 上,这可能完全不同,从而导致您的程序在访问未分配内存时出现分段错误。

相关内容

  • 没有找到相关文章

最新更新