【问题标题】:memory read failed for 0x6000000000x600000000 的内存读取失败
【发布时间】:2017-05-01 08:44:11
【问题描述】:

我正在 xcode Mac 上做简单的 C 语言练习

这是简单的冒泡排序算法。

我猜代码中没有逻辑或语法错误 但我在调试后看到错误警告

错误:0x600000000 的内存读取失败

也许这是关于内存问题,但我不知道这意味着什么 以及如何在没有任何警告消息的情况下解决此问题

P.S:我不是以英语为母语的人。感谢您提前理解我糟糕的英语:)

int p[]={0},i,j,num,temp;

printf("number: ");
scanf("%d",&num);

for(i=0;i<num;i++)
    scanf("%d",&p[i]);

printf("arry numbers show-----");
printf("\n");
for(i=0;i<num;i++)
    printf("%d ",p[i]);
printf("\n");

for(i=0;i<num;i++)
{
    for(j=0;j<num-1;j++)
    {
        if(p[j]>p[j+1])
        {
            temp=p[j];
            p[j]=p[j+1];
            p[j+1]=temp;
        }
    }
}

for(i=0;i<num;i++)
    printf("%d ",p[i]);
printf("\n");

【问题讨论】:

  • p 只有一个元素(int p[]={0})。
  • 这个:int p[]={0} 将创建一个大小为 1 的数组,其中包含一个元素 0。该数组是一个 C 数组,之后不会增长。您可以创建一个大小为num 的可变长度数组(VLA)在扫描num 之后,或者在知道数组的实际大小时分配足够的空间。
  • 好吧。我现在明白了。我以为 C 数组可以长大。非常感谢 oehm !

标签: c arrays sorting bubble-sort


【解决方案1】:

您已显式初始化数组int p[]={0},只有一个元素。在排序的情况下,如果您只有一个元素,则意味着它已经排序!请参阅此数组文档Arrays documentation

【讨论】:

  • 感谢您的宝贵意见!我去看看链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2019-10-07
  • 1970-01-01
  • 2023-04-05
  • 2021-12-27
相关资源
最近更新 更多