C 分段故障(堆芯倾倒)有时
所以我正在做一些事情,我有一个大问题。在我的程序中,当我输入小数组大小时,我没有任何问题,并且程序工作正常(例如3x3)。当我输入像6x6(I=6,j=6)的X数组时,我得到了这个错误,我真的不知道为什么。。。从昨天开始,我一直在努力解决这个问题,但仍然一无所获:(有人能帮助我吗?我在电脑中使用的软件是ubuntu 18.04,如果这很重要的话。我将感谢任何人能帮助我 我的代码是: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[
#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你写的颂歌,那是你的工作。