#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 读取规范配置: ../配置 --前缀=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-check --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux螺纹型号:磅GCC 版本 3.4.5 20051201(红帽 3.4.5-2(
更改以下语句
int ** dp = new int *;
*dp = array;
或者甚至可以写一个语句而不是上面的两个语句
int ** dp = new int *( array );
也不要忘记释放分配的内存
delete dp;
delete []array;
至于您的代码,那么您正在尝试取消引用空指针。
考虑到 C++ 中的 C 标头<stdlib.h>
的名称类似于 <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
此行
*dp = array;
不做你想要的。"dp"是指向指针的指针,其初始值为零 (NULL(。因此,您正在尝试告诉系统将"数组"的地址放置在内存位置0,这是非法的。要使其首先工作,您需要分配一些 int *
dp = new int*[5]; // for example...
dp[0] = array;
这会将第一个指针分配给数组