Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向C+中指针动态数组的指针+;_C++_Arrays_Pointers - Fatal编程技术网

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;iD=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; // <== ???