| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1727 人关注过本帖
标题:求助:变长数组和数组越界
取消只看楼主 加入收藏
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:3 
求助:变长数组和数组越界
在运行线性表插入数据时,程序运行完出现非法操作。
将int a[]={11,22,33,44,55};修改为int a[10]={11,22,33,44,55};就不会出现非法错误。
现在有些头大,请大家多指点几招避免因变长数组引发数组越界而出现非法操作方法。以下是调试代码。

#include <stdio.h>

void Insert(int a[],int &n,int i,int x)
{
  int j;
  //检验插入元素是否合法
  if(i<1 || i>=n+1)
    printf("i值错误!\n");
  else
    {
      //数组元素后移,为插入元素空出位置
      for(j=n-1;j>=i-1;j--)
      {
        a[j+1]=a[j];

      }
      //插入数据元素
      a[i-1]=x;
      //个数加1
      n++;
   
    }

}

int main()
{
    //定义数组
    int a[]={11,22,33,44,55};
    //定义循环变量和数组长度
    int i,n;

    n=5;
    //执行插入操作
    Insert(a,n,3,8);

    //打印数据
    for(i=0;i<n;i++)
    {
        printf("%d,",a[i]);
    }
    printf("\n");
    return 0;

}

[ 本帖最后由 逐渐学习 于 2010-12-22 11:20 编辑 ]
搜索更多相关主题的帖子: 越界 
2010-12-22 11:14
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:0 
以下是引用五当家在2010-12-22 12:22:58的发言:

你这里的int a[]={11,22,33,44,55};要改成为int a[10]={11,22,33,44,55};是因为你调用子函数后加了一个元素进去,如里定义时写成int a[]={11,22,33,44,55};系统会默认为a是一个有5位元素的一维数组,你后面再加一个元素就会出现错误.而你改为int a[10]的话,你这里a中有10个元素,就你这题而言,是用一个数把第六个元素替代了.

数组一旦定义好了大小,就不能添加或删除元素,只能修改元素.
恩,我感觉定义a[10]数组时候,长度尽可能大些。要是不能知道插入多少数据,还是增加些数量判断,防止出现异常。

帮人《---》帮己
2010-12-22 15:10
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:0 
以下是引用laoyang103在2010-12-22 12:52:44的发言:

你可以考虑一下动态开辟一个新的数组
数组的长度由你插入数据的个数和数组的元素个数来决定
开辟一个   new int【原数组长度+插入数据个数】
长度的数组  然后进行操作  完成插入
是用malloc这个吧。如果动态开辟一个新的数组,我感觉像是个链表呢?请指点下。

帮人《---》帮己
2010-12-22 15:24
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:0 
谢谢各位了。

帮人《---》帮己
2010-12-24 09:20
快速回复:求助:变长数组和数组越界
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026703 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved