【问题标题】:Exception occurs when push element of two dimentional array into a stack将二维数组的元素压入堆栈时发生异常
【发布时间】:2013-08-13 22:46:39
【问题描述】:

我在不使用任何库的情况下创建了一个堆栈,但我总是得到错误

'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]);
    }   

}

【问题讨论】:

    标签: c stack


    【解决方案1】:

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

    int *value[10];
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-23
      • 2020-02-24
      • 2012-03-11
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多