我在不使用任何库的情况下创建了一个堆栈,但我总是得到错误
'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]);
}
}
答案 0 :(得分:0)
一个问题是value
数组的运算时间不够长。代码中存储了10个项目,但长度为3.它应该声明为:
int *value[10];
除此之外,还有一些事情可能值得注意(它们可能是也可能不是故意的):
q
声明有点不寻常。它被声明为大小为1的数组,但用作简单结构。它可以简单地声明为stack q;
(相应地改变了用法(例如,q.top = 0;
)value
数组是一个指向int的指针数组,非常好。但是push操作是指向main
中声明的堆栈上的值的指针。在这种情况下,它对于程序的生命是好的和“有效的”。但是根据应用程序的开发方式,这可能会有问题(如果/当这些值超出范围时)。