以下是引用song3891在2009-10-5 11:26:00的发言:
我试了三四天了 最初用的TC2.0 后来又用的TC3.0现在用的VC++全都不行啊 不过 TC2.0和3.0可以多运行点数字才报错for(a=1001;a<2300;a++)这句可以取值20000左右才出错VC1000多就报错
刚刚仔细的看了代码,发现的确存在着潜在的错误;我试了三四天了 最初用的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);
}
你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题