#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-проверяя —with-system-zlib —enable -__ cxa_atexit —disable-libunwind-исключения —enable-java-awt = gtk —host = x86_64-redhat-linux
Модель потока: posix
gcc версия 3.4.5 20051201 (Red Hat 3.4.5-2)
Измените следующие утверждения
int ** dp = new int *;
*dp = array;
Или даже вы могли бы написать одно утверждение вместо двух выше
int ** dp = new int *( array );
Также не забудьте освободить выделенную память
delete dp;
delete []array;
Что касается вашего кода, то вы пытаетесь разыменовать нулевой указатель.
Примите во внимание, что заголовок C <stdlib.h>
в 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
Эта линия
*dp = array;
не делает то, что вы намерены. ‘dp’ — указатель на указатель, и его начальное значение равно нулю (NULL). Итак, вы пытаетесь указать системе поместить адрес массива в ячейку памяти 0, что недопустимо.
Для того, чтобы он заработал в первую очередь, вам нужно выделить номер типа int *
dp = new int*[5]; // for example...
dp[0] = array;
Это назначит первый указатель на ваш массив