运行时向量<int>STATUS_ACCESS_VIOLATION
runtime vector<int> STATUS_ACCESS_VIOLATION
我有一个向量<int>具有二叉树的有序遍历。现在我使用qsort进行排序。之后,当我尝试打印矢量的内容时,在运行时出现了以下错误。
[main] C:General_algorithmsbinaryTreeToBST.exe 1000 (0) handle_exceptions
: Exception: STATUS_ACCESS_VIOLATION
[main] binaryTreeToBST 1000 (0) handle_exceptions: Dumping stack trace to binary
TreeToBST.exe.core
代码如下:
struct BinTreeNode
{
int id;
BinTreeNode *left;
BinTreeNode *right;
BinTreeNode(int a)
{
id=a;
left=right=NULL;
}
};
int compare (const void *a, const void *b)
{
return ( *(int*)a - *(int*)b );
}
int main()
{
BinTreeNode n10(10);
BinTreeNode n2(2);
BinTreeNode n7(7);
BinTreeNode n8(8);
BinTreeNode n4(4);
n10.left=&n2;
n10.right=&n7;
n2.left= &n8;
n2.right= &n4;
cout<<"OK TILL HERE1"<<endl;
vector<int> InTr= inorder(n10); //returns a vector containing the inorder traversal of the tree.
cout<<"OK TILL HERE2"<<endl;
if(InTr.size()!=0)
qsort(&InTr, InTr.size(), InTr[0], compare);
cout<<"OK TILL HERE3"<<endl; //THIS GETS PRINTED
cout<<InTr[0]; //THIS DOESN'T GET PRINTED(Error occurs)
for(int i=0;i<InTr.size();i++)
cout<<InTr[i]<<endl;
cout<<"OK TILL HERE4"<<endl; //THIS DOESN'T GET PRINTED
return 0;
}
你不想这么做,但我想这可能会解决的问题
qsort(&InTr[0], InTr.size(), sizeof(int), compare);
相反,使用算法的sort
。qsort的较慢
&InTr
-是矢量对象的地址,而不是实际数据。应该是:
InTr.data() or &InTr[0]
第三个论点应该是:
sizeof(InTr[0]),
就像大灰狼说的。
顺便说一句,考虑使用STL中的排序,它更"C++"。
http://www.cplusplus.com/reference/vector/vector/
http://www.cplusplus.com/reference/algorithm/sort/
您的问题来自于对的使用
qsort(&InTr, InTr.size(), InTr[0], compare);
第三个参数需要排序的元素的大小。传递InTr[0]
在这里显然是错误的,因为它可以包含int
的任何可能不等于sizeof(vector<int>::value_type)
的值。
使用&InTr
作为第一个参数也是错误的,因为std::vector
中的元素不必从其基地址开始。通过传递这样的向量,您可以有效地让qsort
破坏向量的内部状态。此时,尝试使用矢量变得不可预测。幸运的是,您遇到了访问违规。
其他答案已经提到了首选方法,所以我不在这里重述。
相关文章:
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 例外:'Access violation reading location'
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++
- 我在C++中收到错误" [Error] ld returned 1 exit status".帮我解决这个问题
- 为什么错误"permission denied","id returned 1 exit status"仅在 IM 使用 C++ 中的头文件 fstream 时才出现
- 如何修复我的 c++ 毕达哥拉斯三重查找器中的'access violation reading location'错误?
- 矩阵 - "Access violation writing location 0x00900B0C" - C++ 中的错误
- wifi.status(),在AP_Mode运行时返回WL_Disconnected(6)
- 如何修复张量流中的"Non-OK-status: Not found: Op type not registered 'NoOp' in binary running"
- 在 c++ 和程序中使用循环遍历数组说"exit status -1"?
- 如何修复此代码中的'Access violation reading location'
- 当常量引用参数绑定到右值时,右值是否保持其"status"?
- C++ status -1073741676
- 过载时出错 << "Exception thrown: read access violation.m.matrix was 0xCDDDCDDE."
- c++:链表错误" Access violation reading location"
- Q维吉特"access violation"