Olá, o que o programa pretende não é a questão, mas por quê da o seguinte erro no programa: "signal: segmentation fault (core dumped)", na seguinte situação... A princípio o programa vai rodar tranquilamente, desde que a declaração " int **v " esteja, no programa, declarado depois de " int **p", o que não é o caso aqui, pois deixei de forma obrigatória para entender o problema. Mais a fundo, descobri que não precisa ser necessariamente um ponteiro de ponteiro para dar esse problema, ao contrario, pode ser uma variável qualquer com valor definido ou não.
Obs: O erro só acontece quando usado alocação dinâmica, independente se a criação é no escopo do main ou numa função, como é o caso aqui.
#include <iostream>
using namespace std;
int Quest();
void criar (int **p, int x);
int main(){
int **v;
int x=Quest();
int **p;
criar(p,x);
cout<<"\nFunciona !\n";
delete[] *ponteiro;
}
void criar (int **p, int x) {
*p=new int[x];
for(int i=0; i<x; i++){
p[i]= new int[x];
}
}
int Quest(){
int q;
cout<<"Digite um valor: ";
cin>>q;
return q;
}