簡體   English   中英

指向C ++中的指針動態數組的指針

[英]pointer to pointer dynamic array in C++

我想關閉動態指針時運氣不好。 為什么應用程序在堆緩沖區結束后寫入內存? 如何關閉陣列?

int main()
{
    .
    .   
    int **W;
    W = new int* [n];
    for (int i=1; i <= n; i++)
        W[i] = new int[n];
    .
    .
    .
    ast(n,W);

    for(int i = 1; i <=n ; i++)
    {
        delete W[i];
    }
    delete W;
    getch();
}
void ast (int n,int **W)
{
    int **D;
    D = new int* [n];
    for (int i=0; i < n; i++)
        D[i] = new int[n];

    D=W;
    for (int k=1;k<=n;k++)
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++)
                D[i][j]=min(D[i][j],D[i][k]+D[k][j]);
    .
    .
    for(int i = 1; i <=n ; i++)
    {
        delete D[i];
    }
    delete D;
}

具有N元素的數組的索引的有效范圍是[0, N-1] 因此,而不是例如這個循環

for (int i=1; i <= n; i++)
         ^^^^ ^^^^^^

你必須寫

for ( int i = 0; i < n; i++ )

使用運算符new [] ,必須使用運算符delete []

for(int i = 1; i <=n ; i++)
{
    delete W[i];
}

delete W;

你必須寫

for ( int i = 0; i < n; i++ )
{
    delete [] W[i];
}

delete []W;

函數ast沒有意義,因為除其他錯誤外,它ast內存泄漏。 首先,您分配內存並將其地址分配給指針D ,然后覆蓋該指針的值

void ast (int n,int **W)
{
    int **D;
    D = new int* [n];
    for (int i=0; i < n; i++)
        D[i] = new int[n];

    D=W; // <== ???

暫無
暫無

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

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