Почему размер фрейма Tkinter изменяется при добавлении к нему текстового поля?

Для назначения класса мы пишем специальный системный вызов, который извлекает определенную информацию о существующем дереве процессов. Системный вызов по большей части работает нормально и получает соответствующую информацию. Однако некоторые обрабатывают его, вылетая с сообщением об ошибке «Невозможно обработать разыменование нулевого указателя ядра по виртуальному адресу [адрес]». Чего я не понимаю, так это того, что я проверяю, является ли указатель NULL, прежде чем получить к нему доступ, и, тем не менее, он все равно не работает.

Пример: в приведенном ниже коде current_process - действительный указатель на task_struct, а k_buf действителен

printk("Setting parent process\n");
parent_process = current_process->real_parent;
printk("Parent process set\n");
if (parent_process != NULL) {
printk("Parent process is not null and getting pid\n");
    k_buf[i].parent_pid = parent_process->pid;
} else {
    k_buf[i].parent_pid = 0;
}
printk("Done with parent process\n");

При запуске программа печатает:

Setting parent process
Parent process set
Parent process is not null and getting pid
Done with parent process

пару раз, а затем

Setting parent process
Parent process set
Parent process is not null and getting pid

перед тем, как выдать ошибку и войти в панику ядра.

Что такое Я делаю не так? Есть какие-нибудь мысли?

РЕДАКТИРОВАТЬ:

На данный момент я закомментировал приведенный выше код, чтобы я мог продолжить работу над остальной частью системного вызова. Когда я пытаюсь получить доступ к pid дочернего процесса (снова после пары успешных попыток), он выдает ошибку «Не удается обработать запрос ядра на подкачку по виртуальному адресу». Насколько я понимаю, у меня есть правильные блокировки для чтения этих данных. Однако есть ли что-то еще, что мне нужно сделать, чтобы проверить память перед тем, как получить к ней доступ?

1
задан caf 2 October 2010 в 10:23
поделиться