新手求助,这个程序为什么不能正常输出
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楼的代码不错