使用 delete[] cpp 时出错
Getting an error when using delete[] cpp
当我尝试在代码中使用delete[]
时,在正常块 #151 后检测到堆损坏
#include "Queue.h"
void main() {
queue* stk = new queue;
initQueue(stk, 4);
enqueue(stk, 9);
enqueue(stk, 4);
enqueue(stk, 3);
enqueue(stk, 7);
while (!isEmpty(stk)) {
std::cout << "Popping number:" << dequeue(stk) << std::endl;
}
cleanQueue(stk);
delete stk;
system("Pause");
}
这是删除功能:
void cleanQueue(queue* q) {
delete[] q->_elements;
}
这是结构:
typedef struct queue
{
int * _elements;
int _maxSize;
int _count;
} queue;
有人可以告诉我为什么会发生这种情况以及我应该怎么做才能解决它吗?谢谢。
#include "Queue.h"
void enqueue(queue* q, unsigned int newValue) {
int i = 0;
if (!isFull(q)) {
q->_count++;
q->_elements[0] = newValue;
for (i = q->_count; i > 0; i--) {
q->_elements[i] = q->_elements[i - 1];
}
}
}
int dequeue(queue* q) {
int ans = -1;
if (!isEmpty(q)) {
ans = q->_elements[q->_count];
q->_count--;
}
return(ans);
}
void initQueue(queue* q, unsigned int size) {
q->_count = 0;
q->_maxSize = size;
q->_elements = new int[size];
}
void cleanQueue(queue* q) {
delete[] q->_elements;
}
bool isFull(queue* q) {
return(q->_count == q->_maxSize);
}
bool isEmpty(queue* q) {
return(q->_count == 0);
}
假设你的队列中有一个元素,你的 maxSize 也是 1。它不为空,因此您继续读取元素中_count的值。因此,当唯一的元素位于 elements[0] 时,它会读取元素 [1](因为_count是 1)。 如果超过分配结束,您将遇到内存错误(未定义的行为),但您总是会读取错误的值。
int dequeue(queue* q) {
int ans = -1;
if (!isEmpty(q)) {
ans = q->_elements[q->_count];
q->_count--;
}
return(ans);
}
您可能想从_count中减去一个。
您的排队看起来也存在逻辑错误,因为您在写入新值后移动了元素,因此您覆盖了某些内容。
void enqueue(queue* q, unsigned int newValue) {
int i = 0;
if (!isFull(q)) {
q->_count++;
q->_elements[0] = newValue; // <<<<<<<< Here.
for (i = q->_count; i > 0; i--) {
q->_elements[i] = q->_elements[i - 1];
}
}
}
在排队函数中,计数的值达到 4。然后,您尝试在 for 循环中以 q->elements[4] 的形式访问它,而数组中的最高索引为 3。
正如 Alex 提到的,你的enqueue()
函数有一个错误。请尝试以下代码。
void enqueue(queue* q, unsigned int newValue) {
int i = 0;
if (!isFull(q)) {
for (i = q->_count; i > 0; i--) {
q->_elements[i] = q->_elements[i - 1];
}
q->_elements[0] = newValue;
q->_count++;
}
}
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 编译时出错 - 链接.cpp和头文件
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- ASIOSDK;从hostsample.cpp生成mex文件时出错
- Flex/Bison:构建示例项目以生成 CPP 时出错
- 将节点 js 代码集成到 cpp 库时出错
- 快速傅立叶变换:使用模板化派生类'undefined reference'即使标头和.cpp文件匹配也会出错
- 编译 .cu 与 .cpp:即使没有任何 CUDA 代码,编译器也会出错
- 编译 CPP 应用程序时出错。 "error: 'posix_memalign' was not declared in this scope"
- 使用 delete[] cpp 时出错
- 将 Boost 标头包含在 .h 文件中但不包含在.cpp文件中时出错
- 使用 G++ 在终端中运行.cpp文件时出错
- 使用stat和read()读取cpp文件时出错
- 编译php-cpp main.cpp文件时出错
- main.cpp|15|错误:从 'const char*' 到 'char' 的转换无效 [-允许]|制作游戏时出错
- 编译 cpp-netlib 源代码时出错
- 为我的生成文件运行时出错.cpp
- 从文件调用 .mm 函数时链接器出错.cpp