Я использую код: Блок.Ошибка сегментации при доступе к массиву 2d, переданному функции
Скомпилирован следующий код (без ошибок) и при запуске получил ошибку сегментации.
void print(int size, int **a)
{
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
cout<<a[i][j]<<" ";/**Segmentation fault here**/
}
cout<<endl;
}
}
int main()
{
int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int size = sizeof(a)/sizeof(a[0]);
print(size,(int **)a);
return 0;
}
Я попытался использовать различные методы прохождения массива:
void print(int size, int a[][4])
{
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int size = sizeof(a)/sizeof(a[0]);
print(size,a);
return 0;
}
Я не получил ошибку, код побежал успешно.
Для первого кода вместо использования a[i][j]
, я пробовал с *(*(a+i)+j)
, получил ошибку сегментации.
Тогда я отлажена первый код в момент ошибки сегментации и впитывается следующее:
> p a
$1 = (int **) 0x22fd30
> p *a
$2 = (int *) 0x200000001
> p **a
Cannot access memory at address 0x200000001
Я считаю, что a
провести первый адрес 2d массива. но для p ** a есть другой адрес, указанный в сообщении об ошибке.
Затем я запустил первый код в http://ideone.com/ и столкнулся с ошибкой времени выполнения. Где я ошибаюсь? и почему отладчик показывает другой адрес ?.
Я не знаком с 'станд :: VECTOR' и я не понимаю, что вы подразумеваете под «mix' cout' и 'printf'» – Sab
Указатель на указатель не является двумерным массивом, простым в этом. – Lundin
Тогда '* (* (a + i) + j)' должен работать правильно? – Sab