開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 
問題(Question):
嚴格講起來有兩個,但我不知道是否解決了一個,另一個也可以使用同樣的概念去解決..
....
有兩組陣列,一個是bool型態,另一個是double型態。
在main()中呼叫兩組動態陣列,它們的初始值已經在副程式中給過了。
我知道如何在main()中改它們的值,但我不知道如何將他們傳到另外的副程式中,在該
副程式中做運算、改變它們的值,再將他們傳回到main()中......
我把問題直接在下面的程式碼中敘述。
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版) 
#include <iostream>
using std::cout;
using std::cin;
using std::ios;
using std::cerr;
using std::endl;
#include <stdio.h>
#include <fstream>
using namespace std;
using std::ifstream;
using std::ofstream;
#include <cstdlib>
#include <math.h>
void read_obstacles();
//我在main()中呼叫obst(它是二維動態陣列,在呼叫的副程式中已經給初始值了,假設
//全部都是0),
//我另有一個txt檔,裡面有"座標",我想用read_obstacles()這個副程式來讀這個txt
//檔,只要"座標"符合obst這個陣列的"元素值",它的bool值就改設成1
//我用過void這個宣告,compile會過,但跑到一半就會出現
//想請教這邊應該怎麼改、main()中應該如何呼叫、最下面的副程式該如何寫呢?
ifstream inobst("obst.txt", ios::in);
//這個txt檔的內容如下
2       0
2       1
2       2
2       3
0       0
0       1
0       2
0       3
0       0
1       0
2       0
0       3
1       3
2       3
double ***create_3D_Array(int a, int b, int c);
bool **create_2D_Array_b(int a, int b);
bool **obst;
//########################################################################
int main()
{
         int a,b,c;
         int i,j,k;
         a = 4;
         b = 3;
         c = 3;
         double ***arr = create_3D_Array(a,b,c);
         bool **obst = create_2D_Array_b(b,a);
         //如果上面的宣告不改,最下面的副程式寫法也不改,且沒有在main中呼叫
         //read_obstacles()的話,是不會有任何問題的
         //但呼叫read_obstacles()的話,就會出現The variable 'b' is being
         //used without being initialized.
         //請問上面的宣告、這裡的呼叫、最下面的副程式應該怎麼改
         //才能讀進txt檔的資料以改變obst的元素值呢?
         cout << "3D:" << endl;
         for(i=0; i<=a-1; i++){
                 arr[i][0][0] = i;
         }
         //第二個問題其實跟第一個問題很雷同:
         //就是我可以在main中去更改arr的元素值,但要如何將它們傳到別的副程
         //式中去做運算,再傳回來main中呢?
         system("pause");
         return 0;
}
double ***create_3D_Array(int a, int b, int c)
//########################################################################
{
    double ***A = new double**[a];
    for (int i = 0 ; i < a ; i++)
    {
        A[i] = new double*[b];
        for (int j = 0 ; j < b ; j++)
        {
            A[i][j] = new double[c];
        }
    }
    for (int i = 0 ; i < a ; i++)
        for (int j = 0 ; j < b ; j++)
            for (int k = 0 ; k < c ; k++)
                A[i][j][k] = 0;
    return A;
}
bool **create_2D_Array_b(int a, int b)
//#########################################################################
{
    bool **B = new bool*[a];
    for (int i = 0 ; i < a ; i++)
    {
        B[i] = new bool [b];
    }
    for (int i = 0 ; i < a ; i++)
        for (int j = 0 ; j < b ; j++)
                B[i][j] = 0;
    return B;
}
void read_obstacles() {
//##############################################################################
  int i, j;
  int a, b;
  for( j=0; j<b; j++)
  {
    for( i=0; i<a; i++)
    {
      obst[j][i] = false; //the value of false is 0
    }
  }
  while ( inobst >> j >> i )
  obst[j][i] = true; //the value of true is 1
}
 // read_obstacles()
補充說明(Supplement):