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