#include <iostream> #include <vector> #include <string> using namespace std; #define l_capacity 3 class predicate { public: predicate(){}; predicate(string a, string o, int v) :attr(a), opera(o), value(v){}; public: string attr; string opera; int value; }; struct Event { vector <predicate> pred; }; struct Lnode { vector <Event> saveSub; }; struct c_node { int parent; Lnode *lnode; struct p_directory *pdir; }; struct value_bound { int startBound; int endBound; }; struct c_directory { value_bound valuebound; string attr; c_node *cnode; c_directory *lChild, *rChild; }; struct p_node //p节点,存属性名 { string attr; c_directory cdir; //vector <string> attrMatched; }; struct p_directory { vector <p_node> pnode; }; void InsertBETree(Event sub, c_node cnode, c_directory cdir, vector <string> attrMatched){} int main() { Event subscription_set1 = { { predicate("a", "=", 1), predicate("B", "<", 2), predicate("C", "<", 2) } }; c_node *cnode; cnode = (c_node *)malloc(sizeof(c_node)); (*cnode).lnode = NULL; (*cnode).pdir = NULL; (*cnode).parent = 1; c_directory cdir; cdir.valuebound.startBound = 1; cdir.valuebound.endBound = 4; cdir.cnode = NULL; cdir.lChild = NULL; cdir.rChild = NULL; vector <string> attrMatched; for (int i = 0; i < 4; i++) { InsertBETree(subscription_set1,*cnode,cdir,attrMatched); } return 0; }
InsertBETree()函数本人就不具体写了,本人用VS2013点击F5调试出现的错误是:
0x002328B9 处有未经处理的异常(在 ConsoleApplication3.exe 中): 0xC0000005: 读取位置 0x00000008 时发生访问冲突。
然后进入中断进入了下面这样
前面定义的结构体有相互嵌套的关系,cnode包含pdirectory,pdirectory包含pnode,pnode包含cdirectory,cdirectory包含cnode。
在main函数里面的76行代码出设置断点,执行到这里再按F11并不能跳进InsertBETree函数里面,感觉应该是初始化主函数里面初始化cnode,cdir,有问题是不是堆栈溢出了还是怎么个情况,帮忙分析并解决一下。
解决方案
15
0x00000008
你这是指针指向了非法地址吧。这种地址应该不会用到的
你看下你那个指针怎么赋值和运算的
你这是指针指向了非法地址吧。这种地址应该不会用到的
你看下你那个指针怎么赋值和运算的
15
用你查看函数堆栈的功能,能知道到底发生了什么
25
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
15
根据堆栈 ,问题发生在InsertBETree函数里
10
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
谢谢,根据你的方法,找到了问题所在,暂时解决了
你指针是NULL 就不能使用这个指针。