C++ 指向C+中指针动态数组的指针+;
当我想关闭动态指针时,我的运气一直不好。为什么应用程序在堆缓冲区结束后写入内存?如何关闭阵列C++ 指向C+中指针动态数组的指针+;,c++,arrays,pointers,C++,Arrays,Pointers,当我想关闭动态指针时,我的运气一直不好。为什么应用程序在堆缓冲区结束后写入内存?如何关闭阵列 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++) {
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;
}
intmain()
{
.
.
国际**W;
W=新整数*[n];
对于(int i=1;i具有N
元素的数组的有效索引范围是[0,N-1]
。
因此,不必使用这个循环
for (int i=1; i <= n; i++)
^^^^ ^^^^^^
及
你必须写作
for ( int i = 0; i < n; i++ )
for ( int i = 0; i < n; i++ )
{
delete [] W[i];
}
函数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; // <== ???
void ast(整数n,整数**W)
{
int**D;
D=新整数*[n];
对于(int i=0;i D=W;//W索引是从0到n-1而不是从1到n。你能解释更多吗?你应该从0到n-1而不是从1到n循环。更好的是,使用std::vector。我用0到@illusionist_yahya开始数组索引。你正在使用“动态数组”,你不知道(即使是简单的)数组从索引0开始?
for ( int i = 0; i < n; i++ )
{
delete [] W[i];
}
delete []W;
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; // <== ???