想知道为什么我没有改变struct元素';我什么也不做

想知道为什么我没有改变struct元素';我什么也不做,c,queue,C,Queue,这是一个SqQueue,当我尝试获取队列中的元素时,我发现队列结构成员已更改,但我不知道为什么。当我第一次使用函数myCircularQueueRear时,obj指向的结构元素已更改。在函数中,我没有更改这些数据。(leetcode 266) IDE建议stackoverflow此处有一个UB: SqQueue myCircularQueueCreate(int k) { MyCircularQueue Queue; // stack allocation SqQueue Q=

这是一个SqQueue,当我尝试获取队列中的元素时,我发现队列结构成员已更改,但我不知道为什么。当我第一次使用函数myCircularQueueRear时,obj指向的结构元素已更改。在函数中,我没有更改这些数据。(leetcode 266)

IDE建议stackoverflow

此处有一个UB:

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
之类的呢?还有,你说有些事情改变了?你怎么知道的?你得到了什么样的产出,你期望得到什么?