new大批量的内存后,使用vector,程序崩溃,该怎么解决

new大批量的内存后,使用vector,程序崩溃
本帖最后由 gdestination 于 2014-09-16 10:07:08 编辑
一段程序
vector<string> m_targetFileTypeInfo;
struct nodesArray
{
double (*eleArray)[3];
};
nodesArray nodesArrayInfo[3];
for (int i=0; i<100; i++)

{
nodesArrayInfo[i].eleArray = new double[10001][3];
}
vector<string>().swap(m_targetFileTypeInfo);

在执行“vector<string>().swap(m_targetFileTypeInfo);”的时候崩掉了,请问是为什么
------解决思路----------------------
vector<string>()没有实例化。
------解决思路----------------------
nodesArray nodesArrayInfo[3];
for (int i=0; i<100; i++)
    ...

你定义了一个3个元素的数组然后写了100个元素?

堆栈上的m_targetFileTypeInfo;中的内容早被破坏光了
------解决思路----------------------
double (*eleArray)[3]; 这种写法非常不好,要通过封装一维数组再转多维数组下标接口来实现,就比较容易避免这种问题


------解决思路----------------------
2L 已经指出崩溃的原因
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}

------解决思路----------------------
越界了哇
nodesArray nodesArrayInfo[3];
for (int i=0; i<100; i++)

{
nodesArrayInfo[i].eleArray = new double[10001][3];
}


内存不是这么玩的

------解决思路----------------------
 nodesArrayInfo 数组越界,鉴定完毕。