控制台崩溃输出指针数组和迭代C ++

时间:2015-10-10 12:35:38

标签: c++ arrays pointers

我正在忙于一个简单的概念来显示指针数组和C ++中for循环的迭代

我的编译器没有给予太多帮助,当我运行程序时,控制台会说出以下内容并返回3“应用程序已请求运行时以不寻常的方式终止。

崩溃发生在这一行:

      cout << i + 1 << " " << *(pArray + i) << endl;

但是当我运行这个程序时,省略了i + 1或*(pArray + i)它运行时没有错误或崩溃。

我试图在上面尝试输出是否违法?

请参阅下面的代码:

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {

int * pArray;
int SIZE;
int module;
pArray = new int[SIZE];  

cout <<"Enter the number of Assignments ";
cin >> SIZE;

cout <<"input assignment number " ;

    for (int i = 0; i < SIZE; i++)    
   {    
        cin >> module;    
        *(pArray + i) = module;

   }
   // Print array
   for (int i = 0; i < SIZE; i++)
   {
  cout << i + 1 << " " << *(pArray + i) << endl;
   }
   cout << endl;

   delete[] pArray;  // Deallocate array via delete[] operator

   return 0;
}

我承认有点紧张地问这个问题,但我只是需要有人来解释为什么会这样,因为我正在努力寻找关于这种情况的任何参考。

由于

2 个答案:

答案 0 :(得分:1)

在初始化之前使用SIZE两行。

移动

pArray = new int[SIZE];  

之后获取SIZE的值。

(另外:使用std::vector会更容易。)

答案 1 :(得分:1)

int * pArray;
int SIZE;
int module;
pArray = new int[SIZE];

SIZE尚未初始化,因此,它将是一些垃圾值。 在使用之前将其初始化。

您还可以检查新的成功/失败。

pArray = new(nothrow) int[SIZE];

if(pArray)
//logic