提问者:小点点

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


我正在尝试将命令存储在队列中,并在以后从队列中读取它们。我使用这个队列是因为代码需要在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"

共1个答案

匿名用户

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

使用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;
}