C++结构体数组初始化后写入报错:访问违规0xC0000005求助
解决C++结构体数组输入时的访问违规问题
嘿,这个访问违规的问题其实很好解决,咱们一步步拆解来看:
首先你触发的错误提示里,写入位置0xcdcdcdcd时发生访问违规是个关键线索——这个0xcdcdcdcd是Windows调试环境用来标记未初始化堆内存的特殊值,说明你在往一块不应该被写入的内存地址里写数据了。
问题就出在这行代码上:
scanf("%d", arr[i].value );
scanf的第二个参数要求是指向变量的指针,它需要通过指针定位到存储输入值的内存位置。但你现在传的是arr[i].value——这是一个int类型的变量值,不是指针!scanf会误把这个未初始化的变量值当成内存地址,然后试图往这个地址里写入输入的整数,刚好这个地址对应了调试环境里的0xcdcdcdcd,自然就触发访问违规了。
修正方法
只需要把那行代码改成传递arr[i].value的地址就行:
scanf("%d", &arr[i].value );
另外顺便提一句:你的结构体里包含stack<int>,用new node[size]是完全没问题的,因为C++的new[]会自动为数组里的每个node对象调用默认构造函数,正确初始化losersStack这个栈容器,这部分不用额外操心~
内容的提问来源于stack exchange,提问作者Ran Lavi
相关产品推荐
相关产品推荐

