Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分段故障(堆芯倾倒)有时_C_Arrays_Linux_Input_Cmd - Fatal编程技术网

C 分段故障(堆芯倾倒)有时

C 分段故障(堆芯倾倒)有时,c,arrays,linux,input,cmd,C,Arrays,Linux,Input,Cmd,所以我正在做一些事情,我有一个大问题。在我的程序中,当我输入小数组大小时,我没有任何问题,并且程序工作正常(例如3x3)。当我输入像6x6(I=6,j=6)的X数组时,我得到了这个错误,我真的不知道为什么。。。从昨天开始,我一直在努力解决这个问题,但仍然一无所获:(有人能帮助我吗?我在电脑中使用的软件是ubuntu 18.04,如果这很重要的话。我将感谢任何人能帮助我 我的代码是: #include <stdlib.h> int main(int argc, char *argv[

所以我正在做一些事情,我有一个大问题。在我的程序中,当我输入小数组大小时,我没有任何问题,并且程序工作正常(例如3x3)。当我输入像6x6(I=6,j=6)的X数组时,我得到了这个错误,我真的不知道为什么。。。从昨天开始,我一直在努力解决这个问题,但仍然一无所获:(有人能帮助我吗?我在电脑中使用的软件是ubuntu 18.04,如果这很重要的话。我将感谢任何人能帮助我

我的代码是:

#include <stdlib.h>

int main(int argc, char *argv[])
{
 int N,M;  // N=megethos rows , M=megethos columns
 int **X,**Y;  // pinakas
 int size,i,j,num;
 int freqamount, sizeOfArray;
 float freq;


 printf("\n\nGive me the rows of the table: ");
 scanf("%d",&N);
 printf("\n\nGive me the columns: ");
 scanf("%d",&M);

 size = N*sizeof(int);
 X = malloc(size);

 size = M * sizeof(int);
 for(i=0; i<M;i++){
   X[i] =(int*)malloc(size);
 }

 Y = malloc(size);

 for(i=0;i<3;i++){
   Y[i] = (int*)malloc(3*sizeof(int));
 }

 printf("\n\nGive the number ");
 scanf("%d",&num);


 printf("\n\ngive the frequence");
 scanf("%f",&freq);

 sizeOfArray = N*M;
 freqamount =(int) ((freq * sizeOfArray)/100);
 printf("\nIt should appear: %d times\n",freqamount);
/*
     if(freqamount == 100){
       X[i][j] = num;
     }
     if(freqamount == 0){
       x[i][j] != num;
     }
           X[i][j] = rand() % 100;
*/

 for(i=0;i<N;i++){
   for(j=0;j<M;j++){
     X[i][j] = num;
   }
 }
 for(i=0;i<N;i++){
   for(j=0;j<3;j++){
     if(j=0){
       Y[i][j] = rand() % 100;
     } 
     if (j=1){
       Y[i][j] = i;
     }
     if(j=2){
       Y[i][j] = j;
     }
   }
   printf("%d\t",Y[i][j]);
 }




 for(i=0;i<N;i++){
   free(X[i]);
 }
 free(X);

 return 0;
}
#包括
int main(int argc,char*argv[])
{
int N,M;//N=MEGETOS行,M=MEGETOS列
int**X,**Y;//pinakas
整数大小,i,j,num;
int freqamount,sizeOfArray;
浮动频率;
printf(“\n\n请给我表格的行:”;
scanf(“%d”和“&N”);
printf(“\n\n请给我列:”;
scanf(“%d”、&M);
大小=N*sizeof(int);
X=malloc(尺寸);
尺寸=M*sizeof(int);

对于(i=0;i如果您查看带有符号的转储文件,并查看PC以查看转储文件的触发位置,则问题应该显而易见。您需要考虑代码以及它崩溃时正在执行的操作(程序计数器地址前的行).

您试图解决问题的原因是什么?这与您的问题无关。请尝试将代码减少到可能存在您正在谈论的问题的最小大小。以查看您是否能够确定某个特定部分工作不正常,等等。
size=N*sizeof(int);X=malloc(size);
是错误的,你应该分配
N
int
的指针数量,即
N*sizeof(int*)
size=M*sizeof(int);
是正确的,但是
之后的循环是(i=0;i`if(j=0){`不会做你想做的事,你需要一个
=
。一个打开警告的编译器应该告诉你(比如,
gcc-Wall…
)这种方式到malloc Nx3数组是错误的?我认为这就是问题所在Y=malloc(sizeOfArray);例如(i=0;我试图帮助你理解如何调试代码。当你得到一个内核转储时,事情变得非常糟糕。你打破了C的规则。看到这一点,认识到如何找到出错的代码行,将在将来帮助你。我不会帮你调试你的类分配。或者别的什么。你必须理解C你写的颂歌,那是你的工作。