为什么在尝试访问字符串中的字符时出现段错误

Why do I get a seg fault when trying to access a character in a string

我正在尝试将命令存储在队列中,稍后再从队列中读取它们。我正在使用 this queue 因为代码需要在 Arduino 上 运行。访问第一个(或任何)字符时,出现分段错误。我在这里做错了什么?

int main() {
    cppQueue q(sizeof(char*), 10);
    char c1[] = {'a', 'b', 'c'};

    q.push(&c1);

    char *command;
    q.pop(&command);
    char first = command[0];  <-- error
    // do stuff with first

    return 0;
};

感谢您的帮助!

PS:有效:

cppQueue q(sizeof(int), 10);
int x = 1;
q.push(&x);
int numba;
q.pop(&numba);
std::cout << numba << "\n"

数组不是指针。在大多数表达式情况下,数组可以自动转换为指针,但其中一个例外是与一元 & 运算符一起使用。

使用 q.push(&c1);,队列将读取数组的内容(加上一些超出范围区域的垃圾)代替有效的指针值。

使用指针变量为队列提供指针。

int main() {
    cppQueue q(sizeof(char*), 10);
    char c1[] = {'a', 'b', 'c'};
    char* p = c1;

    q.push(&p);

    char *command;
    q.pop(&command);
    char first = command[0];
    // do stuff with first

    return 0;
}