Тема: Ошибка при считывании списка.
Создаю для LISP-а функцию faces(k n vert), где k- целое число, n длина списка vert, vert - список, состоящий из списков целых чисел, примерно такого вида:((1 2 7 6) (2 3 8 7) (3 4 9 8) (4 5 10 9) (6 7 12 11) (7 8 13 12) (8 9 14 13) (9 10 15 14) (11 12 17 16) (12 13 18 17) (13 14 19 18) (14 15 20 19) (16 17 22 21) (17 18 23 22) (18 19 24 23) (19 20 25 24)). Пока что функция должна только считать входные данные, а возвращает последний элемент последнего входящего списка. Код выглядит следующим образом:
// ----- ads_faces symbol (do not rename) static int ads_faces(void) { struct resbuf *pArgs =acedGetArgs () ,*rb; if(pArgs==NULL) { return 0; } int k, n; int elem; if(pArgs->restype!=RTSHORT) { ads_relrb(pArgs); return 0; } k=pArgs->resval.rint; rb=pArgs->rbnext; if(rb->restype!=RTSHORT) { ads_relrb(rb); return 0; } n=rb->resval.rint; rb=rb->rbnext; int** vert; vert = new int* [n]; for (int i=0; i<n; i++) vert[i] = new int[4]; if(rb->restype!=RTLB) { ads_relrb(rb); return 0; } rb = rb->rbnext; int j=0; while (j<n) { rb = rb->rbnext; i = 0; while (i<4) { elem = rb->resval.rint; vert[j][i] = elem; i++; rb=rb->rbnext; } rb = rb->rbnext; j++; } acedRetInt (elem) ; if ( pArgs != NULL ) acutRelRb (pArgs) ; return (RSRSLT) ; }
Однако, при выполнении возникает необрабатываемое исключение C0000005(Нарушение доступа). Если в цикле заменить while (j<n) на while (j<8) (для приведённого в начале списка vert) то всё работает, возвращается последний элемент 8-го списка - 14. Если while (j<9), то возвращается почему-то 0. Для while (j<k), где 10<k<=16 опять C0000005. В чём дело?