读书人

新手这个程序为什么不能正常输出

发布时间: 2012-05-13 16:39:43 作者: rapoo

新手求助,这个程序为什么不能正常输出
1,index可以声明为int型吗?和size_t有何区别?
2,此程序为什么输出窗口一闪而过,根本看不到输出了什么内容?
#include <iostream>

using namespace std;

int main()
{
int *pi = new int[10];
for(size_t index = 0;index<=9;++index)
{
*(pi++) = index;
cout<<*(pi++)<<endl;
}
delete [] pi;
system("pause");
return 0;
}

[解决办法]
1,可以.size_t 一般是unsigned int.
2.
#include <iostream>
#include <cstdlib>/add
using namespace std;

int main()
{
int *pi = new int[10];
int *p=pi;//add
for(size_t index = 0;index<=9;++index)
{
*(pi) = index;//changed
cout<<*(pi++)<<endl;
}
delete [] p;//changed
system("pause");
return 0;
}
[解决办法]

C/C++ code
#include <iostream>using namespace std;int main(){  int *pi = new int[10];  for(size_t index = 0;index<=9;++index)  {  *(pi++) = index;  cout<<*(pi++)<<endl;  }  delete [] pi;  getchar();  return 0;  }
[解决办法]
 size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小,可不一定是整形,个人认为这和计算机硬件和操作系统的寻址范围有关。
int main(int argc, char* argv[])
{
int *pi = new int[10];
int *p = pi;
for(size_t index = 0;index<=9;++index,++pi)
{
*pi = index;
cout<<*pi<<endl;
}
delete p;
return 0;
}
VC6.0测过这样没问题,只是在循环的最后一次pi会越界。不过程序没操作过那片地址,所有应该没问题。
[解决办法]
C/C++ code
using namespace std;int main(){  int *pi = new int[10];  for(size_t index = 0;index<=9;++index)    {  *(pi++) = index;   第一次自加  cout<<*(pi++)<<endl;   第二次自加 ;                                            循环了,index=9 请问pi最后指的地址是,早已越界,越界访问                                          鬼知道,会发生什么事情  }  delete [] pi;  system("pause");  return 0;  }
[解决办法]
pi++了,delete [] pi还管用吗?

for里面定义数据类型,新标准不直接支持了。
[解决办法]
new申请得到的是什么指针,delete就要释放什么指针。你的pi都++了那么多次了,早就不是最早得到的指针了。
在对new到的指针操作前,保存一个副本以备delete使用。

另外就是你在循环体里两次对指针进行++操作,早越界了。
[解决办法]
对,指针变了,需要备份。
每次循环两次 ++,一次就够了,多了就越界了。
1楼的代码不错

读书人网 >C++

热点推荐