Ошибка C: присваивание выражению с типом массива - PullRequest
0 голосов
/ 28 октября 2019

Я разработал код C для моего модуля, но когда я пытаюсь его скомпилировать, возникает ошибка.

Это часть программы, в которой существует ошибка:

ssize_t exer_read(struct file *pfile, char __user *buffer, size_t length, loff_t *offset) {
    struct file *f = pfile->private_data;
    enum { MAX_BUF_SIZE = 4096 };
    size_t buf_size = 0;
    char *buf = NULL;
    ssize_t total = 0;
    ssize_t rc = 0;

    struct input_event  ev[buf_size];
    int yalv;

    /* Allocate temporary buffer. */
    if (length) {
        buf_size = min_t(size_t, MAX_BUF_SIZE, length);
        ev = kmalloc(buf_size, GFP_KERNEL);
        if (ev == NULL) {
            return -ENOMEM;
        }
    }

И это ошибка:

exer_simple_char_drv.c:77:12: error: assignment to expression with array type
         ev = kmalloc(buf_size, GFP_KERNEL);
            ^

Я не знаю, как решить эту проблему. Может ли кто-нибудь помочь мне, пожалуйста. Спасибо

1 Ответ

0 голосов
/ 28 октября 2019

Если вы хотите выделить память для ev динамически, например:

ev = kmalloc(buf_size, GFP_KERNEL);

, тогда вы хотите, чтобы ev был указателем, а не массивом с автоматической продолжительностью хранения:

struct input_event *ev;
...