c - 将二维数组的元素压入栈时出现异常

标签 c stack

我创建了一个堆栈,如下所示,没有使用任何库,但我总是收到错误

“Queue1.exe”:已加载“C:\Windows\SysWOW64\KernelBase.dll”,无法找到或打开 PDB 文件 “Queue1.exe”:已加载“C:\Windows\SysWOW64\msvcr100d.dll”,已加载符号。 Queue1.exe 中 0x008313aa 处的首次机会异常:0xC0000005:写入位置 0x0072ec00 时发生访问冲突。 Queue1.exe 中 0x008313aa 处未处理的异常:0xC0000005:写入位置 0x0072ec00 时发生访问冲突。

请帮我检查一下。这是我的代码 非常感谢!

typedef struct Stack{
    int *value[3];
    int top;

}stack;

void push(stack *q,int data[4]){
    q->value[q->top++]=data;
}
void main(){
    int array[10][4];
    int i;
    stack q[1];
    q->top=0;
    for(i=0;i<10;i++){
        array[i][0]=i;
        array[i][1]=i+1;
        array[i][2]=i+2;
        array[i][3]=i+3;
        push(q,array[i]);
    }   

}

最佳答案

一个问题是 value 数组对于操作来说不够长。该代码存储了 10 个项目,但长度为 3。它应该声明为:

int *value[10];

除此之外,还有一些事情可能值得注意(它们可能是有意的,也可能不是故意的):

  • 队列 q 声明有点不寻常。它被声明为大小为 1 的数组,但用作简单结构。它可以简单地声明为 stack q; (用法相应改变(例如,q.top = 0;)
  • value 数组是一个指向整数的指针数组,这完全没问题。但是压入操作正在将指针分配给 main 中声明的堆栈上的值。在这种情况下,它对于程序的生命周期来说是好的并且“有效”。但根据应用程序的开发方式,这可能会出现问题(如果/当这些值超出范围时)。

关于c - 将二维数组的元素压入栈时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211674/

相关文章:

c++ - 为什么要使用 MACRO+0 !=0

C、TCP 服务器上的 'fork: resource temporarily unavailable'

c - 如何在没有 GUI 的 Linux 中查看“.db 文件

c - 程序完成后如何在其他电脑上使用?

linux - 程序栈的增长方向到底是什么?

将结构指针转换为另一个嵌入结构

c++ - 显示列表最适合这个吗? (OpenGL)

java - 一种在 Java 中使用堆栈返回新的反向单链表的方法,保留相同的元素但以相反的顺序打印出来

android - 如何在不显示后面主要 Activity 的情况下启动android Activity

c - 弹出一堆 char* 以创建一个新字符串并返回它