gpt4 book ai didi

c++ - C++中指向指针动态数组的指针

转载 作者:行者123 更新时间:2023-11-28 02:25:10 27 4
gpt4 key购买 nike

想关闭动态指针时一直运气不好。为什么应用程序在堆缓冲区结束后写入内存?我怎样才能关闭我的阵列?

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 没有意义,因为除了其他错误外,它还有内存泄漏。首先你分配内存并将其地址分配给指针 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; // <== ???

关于c++ - C++中指向指针动态数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30976384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com