Налагает ли 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 ответ

Решение

Может быть проблема в том, что в первом случае вы размещаете массив в стеке?
Если вы будете использовать ссылку на этот массив вне функции (после того, как функция вернется), вы всегда получите ошибку сегментации.

Пожалуйста, приведите небольшой пример использования вашего массива, и вы получите более полезный совет.

Другие вопросы по тегам