[英]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.