Ubuntu 12.04, не загружающаяся после ошибки обновления drm:gen6_santiize_pm

Я использую Ubuntu 12.04 на своем ноутбуке HP Envy с нескольких лет без любых проблем. Я также регулярно обновляю Ubuntu. Вчера (20.03.2014), когда я обновил, это прекратило загружаться. Я получаю экран входа в систему, но после входа в систему затем не загружается единица. Если я открываю командную строку с помощью Ctrl+Alt+F1, я получаю следующую ошибку:

[   33.650398] [drm:gen6_sanitize_pm] *ERROR* Power management discrepancy: GEN6_RP_INTERRUPT_LIMITS expected 15070000, was 15000000

Может кто-либо помогать мне

Kiran

0
задан 13 January 2009 в 00:54

4 ответа

Ну, сначала необходимо понять, что попытка вытащить значение из массива может дать Вам подсказку к своему первому элементу:

int a[] = {1, 2, 3};
int *ap = a; // a pointer, size is lost
int (&ar)[3] = a; // a reference to the array, size is not lost

Ссылки относятся к объектам с помощью своего точного типа или своего типа базового класса. Ключ - то, что шаблон берет массивы ссылкой. Массивы (не ссылки на них) как параметры не существуют в C++. Если Вы дадите параметру тип массива, то это будет указатель вместо этого. Так использование ссылки необходимо, когда мы хотим знать размер переданного массива. Размер и тип элемента автоматически выведены, поскольку обычно имеет место для шаблонов функций. Следующий шаблон

template<typename T, size_t n>
size_t array_size(const T (&)[n]) {
    return n;
}

Названный с нашим ранее определенным массивом a неявно инстанцирует следующей функции:

size_t array_size(const int (&)[3]) {
    return 3;
}

, Который может использоваться как это:

size_t size_of_a = array_size(a);
<час>

существует изменение, которое я составил некоторое время назад [Редактирование: оказывается, что у кого-то уже была та же самая идея здесь ] , который может определить значение во время компиляции. Вместо того, чтобы возвратить значение непосредственно, это дает шаблону тип возврата в зависимости от n:

template<typename T, size_t n>
char (& array_size(const T (&)[n]) )[n];

Вы говорите, имеет ли массив n элементы, тип возврата является ссылкой на массив, имеющий размер n и тип char элемента. Теперь, можно добраться, время компиляции определило размер переданного массива:

size_t size_of_a = sizeof(array_size(a));

, поскольку массив [1 112] наличие n элементы имеет sizeof n, который даст Вам число элементов в данном массиве также. Во время компиляции, таким образом, можно сделать

int havingSameSize[sizeof(array_size(a))];

, поскольку функция никогда на самом деле не вызывается, она не должна быть определена, таким образом, она не имеет тела. Надежда я мог разрешить вопрос немного.

89
ответ дан 31 October 2019 в 14:02

Я не знаю, какое Ядро Вы используете. У меня была та же проблема с 3.2.0-58-универсальным № 88, и я недавно обновил его к 3.2.0-61 (последний, доступный от менеджера по обновлению), но так как эта проблема появляется, когда я не перезагружал с долгого времени я не уверен, решило ли это проблему (я предполагаю, что это не сделало),

Я нашел, что в принципе 3.3.6 решил эту проблему, но я не уверен, как сделать это с Ubuntu 12.04 или если это безопасно. Взгляните здесь:

https://bugs.launchpad.net/ubuntu / + source/gnome-nettool / + ошибка/1168467

0
ответ дан 8 October 2019 в 10:59

Ничего не происходит с массивом. Это - неиспользованный параметр, который используется для разрешения подписи шаблонной функции.

Это также не может использоваться в качестве аргумента шаблона, но это - отдельная гнида.

1
ответ дан 31 October 2019 в 14:02

Думайте о нем этот путь, предположите, что у Вас был набор функций:

// Note that you don't need to name the array, since you don't
// actually reference the parameter at all.
size_t array_size(const int (&)[1])
{
    return 1;
}

size_t array_size(const int (&)[2])
{
    return 2;
}

size_t array_size(const int (&)[3])
{
    return 3;
}
// etc...

Теперь, когда Вы называете это, какая функция вызвана?

int a[2];
array_size(a);  

Теперь, если Вы templatize arraysize, Вы добираетесь:

template <int n>
size_t array_size(const int (&)[n])
{
    return n;
}

компилятор попытается инстанцировать версии array_size, который соответствует любому параметру, с которым Вы называете его. Таким образом, при вызове его с массивом 10 ints это инстанцирует array_size с n=10.

Затем, просто templatize тип, таким образом, можно назвать его с больше, чем просто международными массивами:

template <typename T, int n>
size_t array_size(const T (&)[n])
{
    return n;
}

И Вы сделаны.

Редактирование : примечание о (&)

круглые скобки необходимы вокруг & для дифференциации между массивом международных ссылок (недопустимых) и ссылочных к массиву ints (что Вы хотите). Так как приоритет [] выше, чем [1 110], если у Вас есть объявление:

const int &a[1];

из-за приоритета оператора, Вы заканчиваете с массивом с одним элементом ссылок константы на интервал, Если Вы хотите & примененный сначала, необходимо вызвать это с круглыми скобками:

const int (&a)[1];  

Теперь Вы имеют ссылку константы на один массив элемента ints. В списке параметра функции Вы не должны указывать название параметра, если Вы не используете его, таким образом, можно отбросить имя, но сохранять круглые скобки:

size_t array_size(const int (&)[1])
21
ответ дан 31 October 2019 в 14:02

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

Похожие вопросы: