| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 454 人关注过本帖
标题:【新手求助】请大家帮帮纠正下代码!
只看楼主 加入收藏
ab6326795
Rank: 2
等 级:论坛游民
帖 子:91
专家分:56
注 册:2010-11-8
结帖率:80%
收藏
 问题点数:0 回复次数:7 
【新手求助】请大家帮帮纠正下代码!
我按照书上的写了个利用指针复制数组的代码,编译成功了,但运行中断,提示:
Run-Time Check Failure #2 - Stack around the variable 'array' was corrupted.

代码如下:
程序代码:
#include <stdio.h>

void mycopy(int *px,int *py,int slen); //声明函数
void disp(int *p,int len);   //声明函数
void main()
{
    int array[20]={0}; //初始化数组
    int array2[]={1,2,3,4,5,6};

mycopy(array,array2,sizeof(array2)); //调用复制函数

disp(array,6);  //调用打印函数
}

void mycopy(int *px,int *py,int slen) //复制数组
{
    int i;
for(i=0;i<slen;i++)
{
*px++=*py++;

}

}

void disp(int *p,int len) //打印复制后的数组

{
    int n;

    for(n=0;n<len;n++)
    {
    printf("%d\n",*(p+n));
   
   
    }

}




搜索更多相关主题的帖子: around 
2011-05-28 10:32
ab6326795
Rank: 2
等 级:论坛游民
帖 子:91
专家分:56
注 册:2010-11-8
收藏
得分:0 
我看的是C++轻松入门,可发现入门并不轻松

我有C程序设计,是谭浩强的,但他说的不好,感觉...

反正C++中有很多和C相同,所以看书时就尝试吧C++代码转化为C,然后写出来了
2011-05-28 10:40
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
sizeof(array2) 这里得到的是数组2所占字节空间,而不是数组个数吧。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-28 10:43
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
程序代码:
void cp (int *to,int *from,int len) {
        int i=0;
        while(i<len) {
                *(to+i)=*(from+i);
                i++;
        }
}

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-28 10:44
ab6326795
Rank: 2
等 级:论坛游民
帖 子:91
专家分:56
注 册:2010-11-8
收藏
得分:0 
回复 2楼 ab6326795
哥,你说的对哦
 1.当我
mycopy(array,array2,sizeof(array2)); //调用复制函数
改成
mycopy(array,array2,6); //调用复制函数


运行就没问题了

检查下才发现可能是书得写法有问题吧?书上没明确说明吧?

2.还有种将错就错的方法就是修改
  int array[20]={0}; //初始化数组

把数组大小提高到30就没问题了
  int array[30]={0}; //初始化数组

呵呵,有各位的帮助真好,谢啦
2011-05-28 10:55
ab6326795
Rank: 2
等 级:论坛游民
帖 子:91
专家分:56
注 册:2010-11-8
收藏
得分:0 
回复 4楼 ansic
照你的写法测试也有问题啊,提示:
Run-Time Check Failure #2 - Stack around the variable 'array' was corrupted.

运行时检查失败#2- 围绕变量数组'堆栈损坏。
2011-05-28 11:00
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用ab6326795在2011-5-28 11:00:10的发言:

照你的写法测试也有问题啊,提示:
Run-Time Check Failure #2 - Stack around the variable 'array' was corrupted.

运行时检查失败#2- 围绕变量数组'堆栈损坏。

那或许是你的编译器的问题。我所有回复的,都是经过验证之后才贴上来的。
程序代码:
root@~ #cat t.c
#include <stdio.h>

int main (void) {

        int a[20],b[]={1,2,3,4,5,6},*pa=a,*pb=b,i;
        void cp (int *to,int *from,int len);
        cp(a,b,6);
        for(i=0;i<6;i++) printf("%i\n",a[i]);
        return 0;

}
void cp (int *to,int *from,int len) {
        int i=0;
        while(i<len) {
                *(to+i)=*(from+i);
                i++;
        }
}
root@~ #./t
1
2
3
4
5
6
root@~ #

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-28 11:22
ab6326795
Rank: 2
等 级:论坛游民
帖 子:91
专家分:56
注 册:2010-11-8
收藏
得分:0 
回复 7楼 ansic
你这样写就运行成功,这等效于:
程序代码:
#include <stdio.h>

void mycopy(int *px,int *py,int slen); //声明函数
void disp(int *p,int len);   //声明函数
void main()
{
    int array[20]={0}; //初始数组
    int array2[]={1,2,3,4,5,6};
mycopy(array,array2,6); //调用复制函数

disp(array,6);  //调用打印函数

getch();
}

void mycopy(int *px,int *py,int slen) //复制数组
{
    int i;
for(i=0;i<slen;i++)
{
*px++=*py++;

}

}

void disp(int *p,int len) //打印复制后的数组

{
    int n;

    for(n=0;n<len;n++)
    {
    printf("%d\n",*(p+n));
   
   
    }

}



我以为你上上面说把局部改成
 int i=0;
        while(i<slen)

{
*px++=*py++;
i++;
}

就可以了,原来你说这
mycopy(array,array2,sizeof(array2)); //调用复制函数
也要改,
mycopy(array,array2,6); //调用复制函数

已经成功了 ,谢谢
2011-05-28 11:44
快速回复:【新手求助】请大家帮帮纠正下代码!
数据加载中...
 
   



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

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