| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 871 人关注过本帖
标题:大家好 我是新手 刚作了个小程序 就碰到问题了 请各位大大帮帮忙
只看楼主 加入收藏
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:17 
以下是引用song3891在2009-10-5 11:26:00的发言:

 我试了三四天了 最初用的TC2.0 后来又用的TC3.0现在用的VC++全都不行啊  不过 TC2.0和3.0可以多运行点数字才报错for(a=1001;a<2300;a++)这句可以取值20000左右才出错VC1000多就报错
刚刚仔细的看了代码,发现的确存在着潜在的错误;
你的程序在做完一次大循环之后,p的指针就向后移动了4位,
一直不停的移动,直到碰到一些受保护的内存地址(比如操作系统的内存),那就报错了,
所以有些人能够正确运行,而你不能够正确运行。
修改意见:你可以在后面加上p = p-4;

针对你把p=new char[7];q=new char[7];都放到循环里面的做法,虽然解决了你自己碰到的问题,
但是也有个潜在的错误,你的内存在不停的泄露,你现在的数据是2300,所以问题不会暴露,
但是当是几千万,几亿的时候,估计你的内存就要爆了。所以在一次循环之后一定要delete[]p,delete[]q
ps:使用指针要小心
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

void main()
{
    int a,b,c=0,i,j;
    char *p,*q,m;
    p=new char[7];
    q=new char[7];
    for(a=1001;a<2200;a++)//这里如果把2200改成2300程序执行时就出错
    {
        b=0;
        itoa(a,p,10);
        q=p;
        for(i=0;i<4;i++)
        {
            p=q;
            p+=i;
            m=*p;
            for(j=i;j<4;j++)
            {
                p++;
                if(m==*p)
                    b++;
            }
        }
        
        if(b==1)
        {
            c++;
            printf("%8d",a);
        }
       p = p-4;
    }
    printf("%8d",c);
}

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-10-06 23:40
song3891
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-10-4
收藏
得分:0 
谢谢 flyingcloude 我终于明白问题所在了 我都要放弃了 万分感谢
2009-10-07 07:02
快速回复:大家好 我是新手 刚作了个小程序 就碰到问题了 请各位大大帮帮忙
数据加载中...
 
   



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

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