U2yyy 2022-08-12 20:48 采纳率: 71.4%
浏览 19
已结题

我的length会在程序运行中无缘无故改变值

一个奇怪的问题

我的length会在程序运行中无缘无故改变值

下面是问题代码

`#include<stdio.h>

#include<windows.h>

void HeapAdjust(int *a,int s,int length);

void swap(int *a,int m,int n);

int main(){

int a[] = {99,19,2,98,103,3,9,20,78,201,88,9,23,46,77,59,67,69,75,38};

/* 这里的length似乎不用const的话就会发生错误,bug? */

int length = sizeof(a)/sizeof(a[0]);

for(int i=length/2;i>=0;i--)

{

​ HeapAdjust(a,i,length);

}

for(int i=length;i>0;i--)

{

​ swap(a,0,i-1);

​ HeapAdjust(a,0,i-2);

}

/* Show the result of Heap_sort */

for(int i=0;i<length;i++)

{

​ printf("%d ",a[i]);

}

system("pause");

}

void HeapAdjust(int *a,int s,int length)

{

int temp = a[s];

for(int j=s2;j<=length;j=2)

{

​ if(j<length&&a[j+1]>a[j])

​ j++;

​ if(temp>=a[j])

​ break;

​ a[s] = a[j];

​ s = j;

}

a[s] = temp;

}

void swap(int *a,int m,int n)

{

int temp = a[m];

a[m] = a[n];

a[n] = temp;

}`

在我的计算机上,如果不加const,length会变成3,但是加了const又不会如此,这是什么原因?

  • 写回答

2条回答 默认 最新

  • 浪客 2022-08-12 21:11
    关注

    代码好好贴一下

    for(int j=s2;j<=length;j=2)
    {
    ​ if(j<length&&a[j+1]>a[j])   越界了。
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月22日
  • 已采纳回答 8月14日
  • 创建了问题 8月12日

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)