我该如何解决这个错误? CRT 检测到应用程序在堆缓冲区结束后写入内存

Posted

技术标签:

【中文标题】我该如何解决这个错误? CRT 检测到应用程序在堆缓冲区结束后写入内存【英文标题】:How do I fix this error? CRT detected that the application wrote to memory after end of heap buffer 【发布时间】:2016-04-08 03:33:47 【问题描述】:

我一直在尝试制作一个动态数组。我的主要方法调用 push_back() 将整数添加到数组中 50 次。如果数组的大小需要加倍,则 push_back() 方法调用 grow_if_needed() 方法。 size() 方法返回数组的当前容量。 toString 方法用于将数组打印为字符串。我在 grow_if_needed() 方法结束时不断收到此错误。

#include <string>
class ArrayList

private:
    static int capacity;
    static int count; 
public:
    int& operator [](int i);
    int *arrayPtr = new int[1];
    ArrayList();
    int * push_back(int m);
    int * grow_if_needed();
    int * erase(int m);
    int size();
    std::string toString();
; 

#include "ArrayList.h"

using namespace std;

int ArrayList::capacity = 1;
int ArrayList::count = 0;

int & ArrayList::operator[](int i)

    return arrayPtr[i];


ArrayList::ArrayList()

    arrayPtr[0] = 0;


int * ArrayList::push_back(int m)

    if (count == size()) 
        grow_if_needed();
    
    for (int i = size() - 1; i >= 0; i--) 
        arrayPtr[i + 1] = arrayPtr[i];
    
    arrayPtr[0] = m;
    count++;

    return arrayPtr;


int * ArrayList::grow_if_needed() 
    int k;
    capacity = size() * 2;
    int * tempArray = new int[capacity];
    for (k = 0; k < count; k++) 
        tempArray[k] = arrayPtr[k];
    
    while (k != capacity) 
        tempArray[k] = 0;
        k++;
    
    delete [] arrayPtr;
    arrayPtr = tempArray;
        return arrayPtr;
   

int ArrayList::size()

    return capacity;


string ArrayList::toString()

    string num =  "";
    for (int i = 0; i <= size() - 1; i++) 
        num += std::to_string(arrayPtr[i]) + " ";
    
    return num;

【问题讨论】:

【参考方案1】:

在您的 push_back 函数中,您有这个循环:

for (int i = size() - 1; i >= 0; i--) 
    arrayPtr[i + 1] = arrayPtr[i];

这里size() - 1top 索引,所以在第一次迭代中,当您执行i + 1 时,您超出了范围。

另外,这个函数被称为push_back,但它试图添加到front?如果它添加到末尾(“后退”),您将不需要循环,您的问题将“神奇地”消失。

【讨论】:

以上是关于我该如何解决这个错误? CRT 检测到应用程序在堆缓冲区结束后写入内存的主要内容,如果未能解决你的问题,请参考以下文章

“CRT 检测到应用程序在堆缓冲区结束后写入内存”是啥意思?

检测到 NonComVisibleBaseClass;我该如何解决?

在 URL 上使用 Imagick 的 readImageFile 时如何修复“检测到无效的 CRT 参数”错误?

ERR_HTTP_HEADERS_SENT - Express:标头在发送到客户端后无法设置,我该如何解决这个错误?

我该如何解决这个问题?

删除 3D 矩阵 c++