2014-12-01 4 views
-3

эй, ребята, у меня проблемы с решением задачи: я должен понять, почему программа делает это, и я должен объяснить, почему .... , но после того, как я скомпилировал файл .c, программа потушена А "ошибка сегментации (ядро сбрасывали)" ошибка , так что я не могу даже понять, что программа делает acually: Sуказатель на ошибку компиляции компилятора

вот код:

#include <stdio.h> 
#include <stdlib.h> 

int main (void){ 

    char *arr[]={"ABCDEF","GHIJKLMNO", "PQRSTUV", "WXYZ1234", "567890!$"}; 

    char **ia[] = { arr + 4, arr + 3, arr + 2, arr + 1, arr }; 
    char ***iaa = ia; 

    printf("%s\n", **iaa + 6);  //explanation 
    printf("%s\n", iaa[-1][-1] + 4); //explanation 
    printf("%s\n", *iaa[-2] + 2); //explanation 

return EXIT_SUCCESS; 

    } 

ТНХ ребята

+0

И вы сомневаетесь? – 2501

+1

Программа четко компилируется (вы не можете получить ошибку сегментации в противном случае.) Похоже, что из задания вы должны идентифицировать проблемы с кодом, а не запускать его. –

+0

помните, что '* p' и' p [0] 'одинаковы –

ответ

0

**iaa + 6 == *iaa[0] + 6 == *(arr + 4) + 6 == arr[4] + 6 == "567890!$" + 6 == "!$"

В вашем случае,

printf("%s\n", **iaa + 6); 

эквивалентно:

printf("%s\n", "!$"); 

Два других линий:

printf("%s\n", iaa[-1][-1] + 4); 
printf("%s\n", *iaa[-2] + 2); 

доступа массивы из границ. Это приводит к неопределенному поведению. После этого все может произойти. См. http://en.wikipedia.org/wiki/Undefined_behavior для более подробной информации.

Смежные вопросы