좋아요. 그래서 저는 c로 int의 3 차원 배열로부터 히스토그램을 만들려고합니다. 다음은 배열을 편집하는 선입니다.배열을 조작 할 때 잘못된 명령이 발생했습니다.
buckets[(int)floor(x/splits)][(int)floor(y/splits)][(int)floor(z/splits)]++;
X, Y는, Z는 분할은 사용자로부터 입력 된 질문했다 (이 루프 인) 이전 프로그램 생성 하였다. 그런 다음이 데이터를 막대 그래프에 넣으려고합니다. 컴파일러가 제게 불법적 인 지시를 내리고 있습니다.
이 지점까지 작업 한 프로그램에 print 서술문을 넣었으므로 이후에는 나오지 않으므로 여기에 있습니다. 다음은 모든 relavent 코드입니다.
ff=fopen(fname,"r");
int buckets[split][split][split];
splits = (double) 1/split;
for(i=0; i<split; i++){
fscanf(ff,"%lf",&x);
fscanf(ff,"%lf",&y);
fscanf(ff,"%lf",&z);
buckets[(int)floor(x/splits)][(int)floor(y/splits)][(int)floor(z/splits)]++;
fclose(ff);
}
int histogram[10];
for (i=0; i<split; i++) {
for (j=0; j<split; j++){
for(k=0;k<split;k++){
histogram[(int)buckets[i][j][k]]++;
}
}
}
가장 큰 원인은'buckets [i] [j] [k]'의 값이'histogram' 배열의 길이보다 길다는 것입니다. 그게 문제가 아니라면 최소한의 자체 테스트 케이스를 포함하도록 질문을 편집하십시오 (http://sscce.org 참조). –
컴파일러는 불법적 인 명령어를 생성하지 않습니다. 버퍼 오버 플로우로 스택을 날려 버리고 함수가 반환 될 때 크래시가 발생하는 것은 일반적인 설명입니다. 디버거를 사용하고 발견 한 내용으로 질문을 업데이트하십시오. –
'printf '를 사용하면'\ n'을 출력하거나'fflush (stdout)'을 호출하여 버퍼가 플러시되었는지 확인해야하기 때문에 프로그램이 실패한 정확한 행을 제공하지 못할 수도 있습니다. 문제가되는 행을 찾으려면 valgrind를 사용하여 프로그램을 실행할 수 있습니다. – murgatroid99