C++ Ubuntu上的分段错误(内核转储)
我读过一些关于同一问题的主题,但我找不到代码中的错误。这是头文件:C++ Ubuntu上的分段错误(内核转储),c++,C++,我读过一些关于同一问题的主题,但我找不到代码中的错误。这是头文件: #pragma once class Queue { private: float *elements; int count; float newElement; public: Queue(); Queue(int); Queue(Queue &); ~Queue(); void enqueue(float); float dequeu
#pragma once
class Queue
{
private:
float *elements;
int count;
float newElement;
public:
Queue();
Queue(int);
Queue(Queue &);
~Queue();
void enqueue(float);
float dequeue();
int getCount();
};
和.cpp文件:
#include "Queue.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
Queue::Queue()
{}
Queue::Queue(int arrSize)
{
this->count = arrSize;
float *elements = new float[arrSize];
for(int i = 0; i < arrSize - 1; i++)
{
newElement = rand()% 4000;
newElement /= 100;
elements[i] = newElement;
}
}
void Queue::enqueue(float element)
{
size_t newSize = count + 1;
float *new_elements = new float[newSize];
memcpy(new_elements, elements, newSize);
count = newSize;
delete [] elements;
elements = new_elements;
elements[count] = element;
}
float Queue::dequeue()
{
float firstElement = elements[0];
size_t newSize = count - 1;
float *new_elements = new float[newSize];
memcpy(new_elements, elements, newSize);
count = newSize;
delete [] elements;
elements = new_elements;
return firstElement;
}
int Queue::getCount()
{
return count;
}
Queue::~Queue()
{
delete [] elements;
}
int main(int argc, char *argv[])
{
srand(time(NULL));
Queue queue(4);
queue.enqueue(3);
}
#包括“Queue.h”
#包括
#包括
#包括
队列::队列()
{}
队列::队列(int arrSize)
{
此->计数=arrSize;
浮动*元素=新浮动[arrSize];
对于(int i=0;i
我试图弄清楚我的错误在哪里,但是我在C++中是个乞丐。
我认为我的“出列”方法出了问题,在尝试修复它之后,它仍然是一样的。有几个问题
- 默认构造函数不初始化其成员
有一个局部变量Queue::Queue(int arrSize)
,该变量对成员elements
进行阴影处理。因此,此构造函数不会初始化其成员elements
应该复制enqueue
字节,而不是count*sizeof(float)
字节newSize
- 正如@Vladimir所注意到的,
在分配的内存之外分配一个元素。应该是enqueue
元素[count-1]=元素代码>
应该复制dequeue
字节,而不是newSize*sizeof(float)
字节newSize