使用动态数组和删除运算符时出现python内存错误 我有这个代码,用来测试C++代码与原始Python代码的速度(我用指针数组来确保数据是在一个连续块中,因为向量在增长时必须复制,这需要O(n)时间):

使用动态数组和删除运算符时出现python内存错误 我有这个代码,用来测试C++代码与原始Python代码的速度(我用指针数组来确保数据是在一个连续块中,因为向量在增长时必须复制,这需要O(n)时间):,python,c++,memory,boost,memory-management,Python,C++,Memory,Boost,Memory Management,这给了我一个双重可用或损坏的内存错误: *** Error in `python3': double free or corruption (!prev): 0x00000000016b1b10 *** 我对delete[]操作符进行了注释,但这给了我一个分段错误: Erreur de segmentation (core dumped) 你知道我该怎么解决这个问题吗 谢谢这里有一些不正确的代码 for(int i = 0; i < 336000; i++){ for(int

这给了我一个双重可用或损坏的内存错误:

*** Error in `python3': double free or corruption (!prev): 0x00000000016b1b10 ***
我对delete[]操作符进行了注释,但这给了我一个分段错误:

Erreur de segmentation (core dumped)
你知道我该怎么解决这个问题吗


谢谢这里有一些不正确的代码

for(int i = 0; i < 336000; i++){
    for(int j = 0; j < 18; j++){
        int N = 18;
        // allocate memory for 18 objects in a continous block
        packets = new PacketInfo[N];
        // create the packetInfo objects
        packets[i] = PacketInfo(i, i);
将分配一个大小为18的向量,包含18个连续元素,并且由于该向量没有增长,因此也没有重新分配

看看你在代码中的注释,我认为你想写的代码是

for(int i = 0; i < 336000; i++){
    int N = 18;
    // allocate memory for 18 objects in a continous block
    vector<PacketInfo> packets(N);
    for(int j = 0; j < N; j++){
        // create the packetInfo objects
        packets[i] = PacketInfo(i, i);
    }
}
for(int i=0;i<336000;i++){
int N=18;
//为连续块中的18个对象分配内存
向量包(N);
对于(int j=0;j
所以这只是一个打字错误。。。谢谢顺便说一句,对于向量,18个对象是在堆栈上还是在堆上?如果我没记错的话,它需要是指针向量,如果我想让对象在堆上向量在堆栈上,PacketInfo对象在堆上。上面的代码是这样的,指针向量可能是这样,也可能不是这样(因为这取决于初始化指针的方式)。这与代码版本的情况完全相同,指针本身在堆栈上,但它指向的是堆上。我想我得回去读取内存分配。。。再次感谢!在函数中声明变量时,该变量位于堆栈上(静态变量是一个例外)。这适用于任何类型的变量,包括指针。指针的不同之处在于它们也指向某些东西,而某些东西可能不在堆栈上。理解指针的关键是在你的头脑中始终将指针和指针指向的东西分开。他们不是一回事。
for(int i = 0; i < 336000; i++){
    for(int j = 0; j < 18; j++){
        int N = 18;
        // allocate memory for 18 objects in a continous block
        packets = new PacketInfo[N];
        // create the packetInfo objects
        packets[i] = PacketInfo(i, i);
vector<PacketInfo> packets(18);
for(int i = 0; i < 336000; i++){
    int N = 18;
    // allocate memory for 18 objects in a continous block
    vector<PacketInfo> packets(N);
    for(int j = 0; j < N; j++){
        // create the packetInfo objects
        packets[i] = PacketInfo(i, i);
    }
}