学习指针C++使用以下代码进入核心转储,我真的不知道为什么?


#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;

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

相关内容

  • 没有找到相关文章

最新更新