簡體   English   中英

如何使用函數為三重指針分配內存?

[英]How can I allocate memory for triple pointer using a function?

我想使用三重指針分配內存來存儲/處理數據。 鑒於我必須在代碼中的多個位置分配數據,因此我實現了一個函數。 在下面的代碼中,我給出了此功能的實現以及一個簡單的main方法,該方法說明了如何在代碼中使用此功能。

代碼編譯沒有錯誤,但是當我運行程序時,它崩潰了。 感謝您為解決此問題所提供的幫助。

編輯:它在函數* Data [i] [j] = new double [x]中壓碎了AllocateMemory函數; 對於i = 0和j = 1

謝謝。

int main()
{
    int x = 2;
    int y = 2;
    int z = 2;
    double*** data;//
    AllocateMemory(&data, x, y, z);
    //play with data

    FreeMemory(data, x, y, z);
    return 0;
}



void AllocateMemory(double**** data, int x, int y, int z)
{
    *data = new double**[z];

    for(int i = 0; i < z; i++)
    {
        *data[i] = new double*[y];
        for(int j = 0; j < y; j++)
        {
            *data[i][j] = new double[x];
        }

    }
}


void FreeMemory(double*** data, int x, int y, int z)
{
    for(int i = 0; i < z; i++)
    {
        for(int j = 0; j < y; j++)
        {
            delete [] data[i][j];
            data[i][j] = NULL;
        }
        delete [] data[i];
        data[i] = NULL;
    }

    delete [] data;
    data = NULL;
}

請記住,數組預訂的優先級高於取消引用運算符。 這里:

*data[i] = new double*[y];

您正在對data下標,然后取消對該指針的引用。 AllocateMemory data參數不是指向數組的指針,而是指向main data的單個變量。 因此, data[1]從未被初始化,您將獲得未定義的行為。 給定上下文,您可能會反過來打算:

(*data)[i] = new double*[y];

您在*data[i][j] = new double[x];行上有相同的錯誤*data[i][j] = new double[x];

您可以通過使用引用參數或(如我建議的那樣)通過將指針返回到新分配的指針數組而不是將其作為參數傳遞來避免這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM