Ответ 1
В выражении,
Попробуйте (int[10])(*myArray)
вместо (int[10])myArray
Или, *[email protected]
вместо [email protected]
Я использую Qt на Ubuntu. Когда я отлаживаю, я вижу только первое значение массива в Locals and Watchers. Как просмотреть содержимое массива?
struct node
{
int *keys;
void **pointers;
int num_keys;
struct node *parent;
int is_leaf;
struct node *nextLevelNode;
};
В окне отладки отображается только первое ключевое значение.
В выражении,
Попробуйте (int[10])(*myArray)
вместо (int[10])myArray
Или, *[email protected]
вместо [email protected]
Показывает только первое значение ключа в окне отладки
Я предполагаю, что вы ссылаетесь на клавиши указателя, объявленные с помощью int *keys;
Отладчик не знает, что это массив: все, что он знает, это указатель на int
. Поэтому он не может знать, сколько значений вы хотите отобразить.
То, что я нашел, используя отладчик Qt Creator 2.1.0 на Ubuntu, заключается в том, что следующий код позволяет мне видеть все 5 значений:
int array1[5];
array1[0] = 2;
array1[1] = 4;
array1[2] = 6;
array1[3] = 8;
array1[4] = 10;
В то время как с помощью этого кода отладчик показывает только первое значение, точно так же, как вы описываете.
int* array2 = new int[5];
array2[0] = 20;
array2[1] = 21;
array2[2] = 22;
array2[3] = 23;
array2[4] = 24;
Помимо этого, конечно, вышеупомянутый код будет сопровождаться этим, чтобы избежать утечки памяти:
delete[] array2;
Позже. Этот Qt Developer Network Forum Post говорит, что вы можете сказать отладчику отображать указатель как массив:
В Locals and Watchers, в контекстном меню ввода указателей, выберите "Watch Expression". Это создает новое наблюдаемое выражение ниже.
Здесь дважды щелкните запись в столбце "Имена" и добавьте "@10", чтобы отобразить 10 записей.
Похоже, вам это нужно.
Просто щелкните правой кнопкой мыши на своей переменной и выберите Change Value Display Format
и проверьте Array of 100 items
.
В Qt для mac то, что сработало для меня, было:
Таким образом невозможно отобразить двумерные массивы. Существует обход. Сначала объявите двумерный массив как одномерный массив следующим образом:
int width = 3;
int height = 4;
int* array2D = new int [width*height];
int x,y;
for(x=2;x>-1;x--)
for(y=3;y>-1;y--)
array2D[x*height + y] = -1; // mark a breakpoint here!
// add to expression evaluator: (int[3][4]) *array2D
delete [] array2D;
Затем добавьте (int[3][4]) *array2D
в (int[3][4]) *array2D
оценки выражений. К сожалению, вам нужно индексировать массив самостоятельно, но вы можете написать специальную встроенную функцию или использовать другой метод инкапсуляции, чтобы сделать его немного более чистым.