终端显示 C 语言中的"segmentation fault(core dumped)",请检查我的代码中有什么问题?



代码是关于将三个双精度变量的地址作为参数的这会将最小变量的值移动到第一个变量中,即中间值到第二个变量,最大值到第三个变量。

#include<stdio.h>
void swapy(double *x, double *y, double *z);
int main()
{
    double no1,no2,no3;
    printf("Enter three numbersn");
    printf("no1 = ");
    scanf("%lf",&no1);
    printf("no2 = ");
    scanf("%lf",&no2);
    printf("no3 = ");
    scanf("%lf",&no3);
    swapy(&no1,&no2,&no3);
    printf("The numbers will be printed in increasing order!n");
    printf("no1 = %lfn",no1);
    printf("no2 = %lfn",no2);
    printf("no3 = %lfn",no3);
}
void swapy(double *x, double *y, double *z)
{
     double *max; 
     double *mid; 
     double *min;   
     if(*x>*y && *x>*z) {
        *max = *x;
     }
     else if(*y>*x && *y>*z) {
        *max = *y;
     }
     else {
        *max = *z;
     }

     if(*x<*y && *x<*z) {
        *min = *x;
     }
     else if(*y<*x && *y<*z) {
        *min = *y;
     }
     else {
        *min = *z;
     }
    if(*x != *max && *x != *min) {
        *mid = *x;
     }
     else if(*y != *max && *y != *min) {
        *mid = *y;
     }
     else {
        *mid = *z;
     }
     *x = *min;
     *y = *mid;
     *z = *max;
     return;
}

在此处输入图像描述

代码是关于 将三个双精度变量的地址作为参数这会将最小变量的值移动到第一个变量中,即中间值到第二个变量,最大值到第三个变量。

你的问题在这里很清楚:maxmidmin是未初始化的。尝试:

void swapy(double *x, double *y, double *z)
{
     double max; 
     double mid; 
     double min;   
     if( (*x>*y) && (*x>*z)) {
        max = *x;
     }
     else if((*y>*x) && (*y>*z)) {
        max = *y;
     }
     else {
        max = *z;
     }

     if((*x<*y) && (*x<*z)) {
        min = *x;
     }
     else if((*y<*x) && (*y<*z)) {
        min = *y;
     }
     else {
        min = *z;
     }
    if((*x != max) && (*x != min)) {
        mid = *x;
     }
     else if((*y != max) && (*y != min)) {
        mid = *y;
     }
     else {
        mid = *z;
     }
     *x = max;
     *y = min;
     *z = mid;
}

您可以注意到我在您的if条件中添加了括号。这是一个好习惯,否则有时可能会导致不必要的行为。

maxminmid是未启动的指针,然后您正在执行*max = *x;这会导致分段错误。

首先分配maxminmin有效地址,然后再进行进一步的操作。

您可以为每个动态分配 8 个字节,然后可以存储值。

double *max=malloc(sizeof(double));
 double *mid=malloc(sizeof(double));
 double *min=malloc(sizeof(double));

功能齐全

void swapy(double *x, double *y, double *z)
{
        double *max=malloc(sizeof(double)); 
        double *mid=malloc(sizeof(double)); 
        double *min=malloc(sizeof(double));   
        if(*x>*y && *x>*z) {
                *max = *x;
        }
        else if(*y>*x && *y>*z) {
                *max = *y;
        }
        else {
                *max = *z;
        }
        if(*x<*y && *x<*z) {
                *min = *x;
        }
        else if(*y<*x && *y<*z) {
                *min = *y;
        }
        else {
                *min = *z;
        }
        if(*x != *max && *x != *min) {
                *mid = *x;
        }
        else if(*y != *max && *y != *min) {
                *mid = *y;
        }
        else {
                *mid = *z;
        }
        *x = *max;
        *y = *min;
        *z = *mid;
        // return;//wrong .. return type mentioned as void 
}

最新更新