이 프로그램은 quicksort를 사용하여 숫자를 정렬 한 다음 음수와 양수를 번갈아 나타내는 코드를 사용합니다.프로그램을 실행하는 동안 세그먼트 화 오류가 발생했습니다.
#include<stdio.h>
#include<stdlib.h>
void swap(int *arr,int i,int j)
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
int partition(int *arr,int left,int right)
{
int temp=0;
int i=left;
int j=right;
while(i<=j)
{
while(i<=right && arr[i]<=temp)
i++;
while(j>=left && arr[j]>=temp)
j--;
if(i<j)
swap(arr,i,j);
}
return j;
}
void quick_sort(int *arr,int left,int right)
{
if(left<right)
{
int pivot=partition(arr,left,right);
quick_sort(arr,left,pivot-1);
quick_sort(arr,pivot+1,right);
}
return ;
}
void nega(int *arr,int left,int right)
{
int i;
quick_sort(arr,left,right);
for(i=0;i<right+1;i++)
{
if(arr[i]>=0)
break;
}
int j=i;
int k;
for(i=1,k=j;i<j && k<=right;i+=2,k++)
{
int temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
}
}
int main()
{
int i,n;
int arr[15];
printf("enter the n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("enter the element");
scanf("%d",&arr[i]);
}
printf("debug");
nega(arr,0,n-1);
for(i=0;i<n;i++)
printf("%d",arr[i]);
return 0;
}
여기 코드는 사용자에게 n 값을 요청하고 n 요소를 배열로 가져옵니다. n의 값이 1 (즉, 한 요소의 경우)이면 올바르게 작동합니다. n> 1 (1 개 요소 이상)의 값. 세분화 오류가 표시 될 수 있습니다. 함수 어딘가에 있으면 액세스 할 수없는 위치에 액세스 할 수 있습니다.
단, code.It에 입력이 직접 printf("debug");
을 실행하기 전에 세그먼트 오류를 보여주는 직후가 printf("debug");
을 실행되지 않는 이유 이해가 안 나는 printf("debug");
전에 세그먼트 오류에 대한 원인을 찾을 수 없습니다.
누군가가 문제를 지적 할 수 있습니까? 감사합니다.
디버깅 할 목적으로 'printf ("% d (% i of % i)", arr [i], i, n)'를 scanf –