上天人 2022-10-24 22:53 采纳率: 66.7%
浏览 54
已结题

C语言printf无法正常输出内容

无法正常输出内容

#include<stdio.h>
//  此函数目的为将所输入数组输出为下一个数组,如【1,3,2】->【3,1,2】,【3,2,1】->【1,2,3】
int *answer(int *array,int n);
int main()
{
    //数组长度
    int number;
    scanf("%d",&number);
    int array[number];
    //数组初始值
    for (int i=0;i<number;i++)
    {
        scanf("%d",&array[i]);
    }
    int *p=NULL;
    p=answer(array,number);
    for (int i=0;i<number;i++)
    {
        printf("%d ",p[i]);
    }
}
//找两个要交换的值即可完成目的(靠右的较小值和较小的较大值)
int *answer(int *array,int number)
{
    //建立左右指针
    int *output=NULL;
    int *left_point=NULL;
    int *right_point=NULL;
    int i;
    //从右往左找出第一个降序,确定较小值。同时当出现类似【3,2,1】时输出最小序列
    for (i=number-1;i>=0;i--)
    {
        if(array[i]<array[i+1])
        {
            left_point=&array[i];
            break;
        }
        if(i==0)
        {
            for (int m=0;m<number;m++)
            {
                output[m]=array[number-m-1];
            }
            return output;
            
        }
    }
    //找较大值
    int j;
    for (j=number-1;j>i;j--)
    {
        if(array[j]>array[i])
        {
        right_point=&array[j];
        break;
        }
    }
    //交换
    int *temp=NULL;
    *temp=*left_point;
    *left_point=*right_point;
    *right_point=*temp;
    return array;
}

运行结果及报错内容 segmetation fault.
  • 写回答

3条回答 默认 最新

  • 等一场春风 2022-10-24 23:21
    关注

    没仔细看 大致扫了一眼
    错误一33行数组越界了 i+1那个
    错误二:42行对output是空指针,不能对其解引用,而且数组不能那么写,指针要写那种数组的写法的话要开辟空间(malloc等)
    错误三:59,60行对空指针解引用了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月24日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大