Налагает ли dart VM ограничения на размер стековой памяти собственного расширения?
Я учусь писать собственное расширение и заметил странное явление. Когда я выделяю многомерный массив и получаю к нему доступ следующим образом: (извините за любой грязный код на C и плохие практики, которые я мог бы использовать, если только они не являются причиной моей ошибки. Мой C не так уж и хорош)
int table[rows][cols]; //rows and cols are both > 1
memset(table, 0, sizeof(int) * rows * cols);
Я получаю ошибку сегментации, если я делаю что-то вроде
table[rows-1][cols-1];
Но если я выделю таблицу так:
table = (int**)malloc(XLEN * sizeof(int *));
if (table == NULL) {
... error ...
}
for (i=0; i < XLEN; i++) {
table[i] = (int*)malloc(YLEN * sizeof(int));
if (table[i] == NULL) {
... error ...
}
memset(table[i], 0, sizeof(int) * YLEN);
}
Тогда все работает нормально. Почему это может быть?
1 ответ
Может быть проблема в том, что в первом случае вы размещаете массив в стеке?
Если вы будете использовать ссылку на этот массив вне функции (после того, как функция вернется), вы всегда получите ошибку сегментации.
Пожалуйста, приведите небольшой пример использования вашего массива, и вы получите более полезный совет.