-5
#include <stdlib.h>
int main(){
    int *array = new int[2];
    array[0] = 1;
    array[1] = 2;
    int ** dp = NULL;
    *dp = array;
    return 0;
}    

当我运行它时,分段错误(核心转储)。g++ 版本是

从 /usr/lib/gcc/x86_64-redhat-linux/3.4.5/specs 读取规范 配置:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr /share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk - -host=x86_64-redhat-linux 线程模型:posix gcc version 3.4.5 20051201 (Red Hat 3.4.5-2)

4

2 回答 2

1

更改以下语句

int ** dp = new int *;

*dp = array;

甚至你可以写一个语句而不是上面的两个

int ** dp = new int *( array );

也不要忘记释放分配的内存

delete dp;
delete []array;

至于您的代码,那么您正在尝试取消引用空指针。

考虑到<stdlib.h>C++ 中的 C 标头命名为<cstdlib>. 并且此标头未在您的程序中使用。所以你可以删除它。

该程序可能看起来像

#include <iostream>

int main() 
{
    int *array = new int[2] { 1, 2 };
    int ** dp = new int *( array );

    std::cout << ( *dp )[0] << '\t' << ( *dp )[1] << std::endl;

    delete dp;
    delete []array;

    return 0;
}

输出是

1   2
于 2014-11-09T15:03:32.000 回答
0

这条线

*dp = array;

不做你想做的事。'dp' 是指向指针的指针,其初始值为零 (NULL)。因此,您试图告诉系统将“数组”的地址放置到内存位置 0,这是非法的。要使其首先工作,您需要分配一些 int *

dp = new int*[5];  // for example...
dp[0] = array;

这会将第一个指针分配给您的数组

于 2014-11-09T15:03:30.343 回答