Search code examples
c++pointerscoredumpdouble-pointer

Learning C++ pointer runs into core dump with following code, I really don't why?


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

when I run it ,Segmentation fault (core dumped). g++ version is

Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.5/specs Configured with: ../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 Thread model: posix gcc version 3.4.5 20051201 (Red Hat 3.4.5-2)


Solution

  • Change the following statements

    int ** dp = new int *;
    
    *dp = array;
    

    Or even you could write one statement instead of the two above

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

    Also do not forget to free the allocated memory

    delete dp;
    delete []array;
    

    As for your code then you are trying to dereference a null pointer.

    Take into account that C header <stdlib.h> in C++ is named like <cstdlib>. And this header is not used in your program. So you may remove it.

    The program could look like

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

    The output is

    1   2