想知道为什么我没有改变struct元素';我什么也不做
这是一个SqQueue,当我尝试获取队列中的元素时,我发现队列结构成员已更改,但我不知道为什么。当我第一次使用函数myCircularQueueRear时,obj指向的结构元素已更改。在函数中,我没有更改这些数据。(leetcode 266) IDE建议stackoverflow此处有一个UB:想知道为什么我没有改变struct元素';我什么也不做,c,queue,C,Queue,这是一个SqQueue,当我尝试获取队列中的元素时,我发现队列结构成员已更改,但我不知道为什么。当我第一次使用函数myCircularQueueRear时,obj指向的结构元素已更改。在函数中,我没有更改这些数据。(leetcode 266) IDE建议stackoverflow此处有一个UB: SqQueue myCircularQueueCreate(int k) { MyCircularQueue Queue; // stack allocation SqQueue Q=
SqQueue myCircularQueueCreate(int k) {
MyCircularQueue Queue; // stack allocation
SqQueue Q=&Queue;
Q->size=k;
/* ... */
return Q; // returning the address of a stack object
}
完成该功能后,分配的结构将被解除分配此处有一个UB:
SqQueue myCircularQueueCreate(int k) {
MyCircularQueue Queue; // stack allocation
SqQueue Q=&Queue;
Q->size=k;
/* ... */
return Q; // returning the address of a stack object
}
完成该函数后,分配的结构将在此处解除分配
SqQueue myCircularQueueCreate(int k) {
MyCircularQueue Queue;
SqQueue Q=&Queue;
...
...
return Q;
}
返回局部变量的地址。当函数返回时,该变量停止存在。因此,之后使用指针访问系统中不再存在的对象
使用动态分配代替局部变量,即
SqQueue Q =malloc(sizeof *Q);
顺便说一句:typedef
指针通常被认为是个坏主意。这里
SqQueue myCircularQueueCreate(int k) {
MyCircularQueue Queue;
SqQueue Q=&Queue;
...
...
return Q;
}
返回局部变量的地址。当函数返回时,该变量停止存在。因此,之后使用指针访问系统中不再存在的对象
使用动态分配代替局部变量,即
SqQueue Q =malloc(sizeof *Q);
顺便说一句:
typedef
指针通常被认为是个坏主意。欢迎使用堆栈溢出!听起来您可能需要学习如何使用a来逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:。您应该构造一个。有几个功能你甚至不用,为什么要给我们看呢?此外,您显然正在使用现代C语言,其中包括bool
、true
和false
。那么为什么要使用#定义FALSE 0
之类的呢?还有,你说有些事情改变了?你怎么知道的?您得到了什么输出?您期望得到什么?欢迎使用堆栈溢出!听起来您可能需要学习如何使用a来逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:。您应该构造一个。有几个功能你甚至不用,为什么要给我们看呢?此外,您显然正在使用现代C语言,其中包括bool
、true
和false
。那么为什么要使用#定义FALSE 0
之类的呢?还有,你说有些事情改变了?你怎么知道的?你得到了什么样的产出,你期望得到什么?