XshmsegmentInfo не является копируемым. Копирование его приносит ошибку BadshmsegC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 XshmsegmentInfo не является копируемым. Копирование его приносит ошибку Badshmseg

Сообщение Anonymous »

Я разрабатываю программу захвата экрана с использованием x11 Framework. И вы можете принести пример кода здесь: https://github.com/lumina37/t-capture/t ... f765223f80. x.c1/x1/x.c1/x.c. Комментарий строка 84: < /p>
из < /p>

Код: Выделить всё

    auto anotherShmInfo = std::move(shmInfo);
// auto anotherShmInfo = std::make_unique(*shmInfo);
< /code>
to < /p>
    // auto anotherShmInfo = std::move(shmInfo);
auto anotherShmInfo = std::make_unique(*shmInfo);
Затем создайте и запустите целевой Cmake Target TCAP-SCREEN-X11 SHARED , x11 вызовет ошибку:

Код: Выделить всё

X Error of failed request:  BadShmSeg (invalid shared segment parameter)
Major opcode of failed request:  131 (MIT-SHM)
Minor opcode of failed request:  4 (X_ShmGetImage)
Segment id in failed request:  0xd7f49827
Serial number of failed request:  69
Current serial number in output stream:  69
Похоже, что объект xshmsegmentInfo не копируется. Определение xshmsegmentInfo :

Код: Выделить всё

typedef unsigned long ShmSeg;

typedef struct {
ShmSeg shmseg;  /* resource id */
int shmid;      /* kernel id */
char *shmaddr;  /* address in client */
Bool readOnly;  /* how the server should attach it */
} XShmSegmentInfo;
, где shmaddr выходит из вызова SHMAT (shmid, nullptr, 0) (это что -то вроде Malloc) и не будет уничтожен, если вы не вызовуте SHMDT (SHMADDR) .
, так почему нельзя xshmsegmentInf)
, так почему нельзя xshmsegmentInf? У него нет указателя для самореализации, нет функционалов RAII.

Подробнее здесь: https://stackoverflow.com/questions/796 ... mseg-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»