| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 993 人关注过本帖
标题:正确的程序,但不能运行应如何修改?
只看楼主 加入收藏
yxb0001
Rank: 2
等 级:论坛游民
帖 子:50
专家分:35
注 册:2009-9-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
正确的程序,但不能运行应如何修改?

#include<iostream.h>
#include<stdlib.h>

int a[20]={2,0,6,23,41,0,5,6,0,99,33,22,0,12,67,0,9,3,6,23};
int *p,i,j=0;
int **y;

int main()
{
    y = (int **)calloc(20,sizeof(int *));

    p=&a[0];
     
    for(i=0;i<20;i++)
    {
        if(*(p+i)!=0)
        {
            *(y+j)=p+i;
            
            cout<<**(y+j)<<" ";

            j++;
        }
    }
    cout<<"\n";
   
    for(i=0;i<=j;i++)
    {
        if(i>2)
        {
            while(**(y+i)>**(y+i-1) && **(y+i-1)>**(y+i-2))
            {
                cout<<**(y+i)<<" ";break;
            }
        }
    }
   
    return 0;
}

运行后没有结果,屏幕显示指令引用的内存不能为"read",请问如何修改?








[ 本帖最后由 yxb0001 于 2009-9-23 15:11 编辑 ]
搜索更多相关主题的帖子: 运行 
2009-09-23 13:43
gz81
Rank: 5Rank: 5
等 级:职业侠客
帖 子:137
专家分:369
注 册:2008-5-1
收藏
得分:0 
我运行没问题,编译环境:Code::Blocks,显示结果:

2 6 23 41 5 6 99 33 22 12 67 9 3 6 23 请按任意键继续. . .


[ 本帖最后由 gz81 于 2009-9-23 14:00 编辑 ]

我的空间:http://student./space.php?uid=116706
2009-09-23 13:46
yxb0001
Rank: 2
等 级:论坛游民
帖 子:50
专家分:35
注 册:2009-9-9
收藏
得分:0 
上部分运行没有问题,但下面加了一点东东,运行就有问题了。这些东东如下:

for(i=0;i<=j;i++)
    {
        while(**(y+i)>**(y+i-1) && **(y+i-1)>*(y+i-2))
        {
            cout<<**(y+j)<<" ";
        }
    }


[ 本帖最后由 yxb0001 于 2009-9-23 14:29 编辑 ]
2009-09-23 13:51
gz81
Rank: 5Rank: 5
等 级:职业侠客
帖 子:137
专家分:369
注 册:2008-5-1
收藏
得分:0 
以下是引用yxb0001在2009-9-23 13:51的发言:

上部分运行没有问题,但下面加了一点东东,运行就有问题了。这些东东如下:

for(i=0;i<=j;i++)
    {
        while(*(y+i)>*(y+i-1) && *(y+i-1)>*(y+i-2))
        {
            cout<<**(y+j)<<" ";
        }
 ...
i为0时,y+0-1,明显是越界……

[ 本帖最后由 gz81 于 2009-9-23 14:15 编辑 ]

我的空间:http://student./space.php?uid=116706
2009-09-23 14:05
yxb0001
Rank: 2
等 级:论坛游民
帖 子:50
专家分:35
注 册:2009-9-9
收藏
得分:0 
即使改为下面也一样,估计不是越界这个问题。 (所加东东有点笔误,已修改过来)
for(i=0;i<=j;i++)  
    {  
       if(i>=2){
         while(**(y+i)>**(y+i-1) && **(y+i-1)>**(y+i-2))  
         {  
            cout<<**(y+j)<<" ";  
         }  
        
        }
}
 
我想实现的功能是:在数组a中除0处的元素组成的新数组中(原来的地址不变),如果按顺序的三个数存在a>b>c的关系,则显示a。

[ 本帖最后由 yxb0001 于 2009-9-23 14:31 编辑 ]
2009-09-23 14:25
gz81
Rank: 5Rank: 5
等 级:职业侠客
帖 子:137
专家分:369
注 册:2008-5-1
收藏
得分:14 
我改了一下,请参考:

#include<iostream>
#include<stdlib.h>
using namespace std;
 
int a[20]={2,0,6,23,41,0,5,6,0,99,33,22,0,12,67,0,9,3,6,23};  
 
int main()  
{  
    int j = 0;
    int *p = &a[0];
    int *y = new int[20];
 
    p=&a[0];  
      
    for(int i=0;i<20;i++)  
    {  
        if(*(p+i)!=0)  
        {  
            *(y+j)=*(p+i);  
              
            cout<<*(y+j)<<" ";  
 
            j++;  
        }  
    }
    cout<<"\n";
     
    if (j<2)
        cout<<"元素个数少于三个,不能比较。";
    else
    {
        for (int i=0; i<=j-2; ++i)
        {
            if (*(y+i)<*(y+i+1) && *(y+i+1)<*(y+i+2))
                cout<<*(y+i)<<" ";
        }
 
    }

    delete []y;
     
    return 0;
}


[ 本帖最后由 gz81 于 2009-9-23 16:24 编辑 ]

我的空间:http://student./space.php?uid=116706
2009-09-23 14:39
yxb0001
Rank: 2
等 级:论坛游民
帖 子:50
专家分:35
注 册:2009-9-9
收藏
得分:0 
while这里包含if的过滤功能,过界在此不适应。如下程序可表明此功能:

#include<iostream.h>  
#include<stdlib.h>  
 
int a[20]={2,0,6,23,41,0,5,6,0,99,33,22,0,12,67,0,9,3,6,23};  
int i;
 
int main()
{
    for(i=0;i<20;i++)
    {
     
        while(a[i]>a[i-1] && a[i-1]>a[i-2])
     
        {
            cout<<a[i]<<" ";
     
            break;
        }
    }
    return 0;
}
2009-09-23 14:51
yxb0001
Rank: 2
等 级:论坛游民
帖 子:50
专家分:35
注 册:2009-9-9
收藏
得分:0 
谢谢!这种方法我会,这个问题主要是想运用指针的指针方法解决。
2009-09-23 15:07
yxb0001
Rank: 2
等 级:论坛游民
帖 子:50
专家分:35
注 册:2009-9-9
收藏
得分:0 
明白了,是j溢出的原因,for(i=0;i<=j;i++)  改为for(i=0;i<j;i++)即可。指针数组的元素是j个不是(j+1)个。  
2009-09-23 15:20
智奇CC
Rank: 2
来 自:GD
等 级:论坛游民
帖 子:34
专家分:73
注 册:2009-9-8
收藏
得分:0 
楼上高手吖,支持一下

书山有路勤为劲,
学海无涯苦作舟。
2009-09-23 15:25
快速回复:正确的程序,但不能运行应如何修改?
数据加载中...
 
   



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

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