我已经阅读了几个关于同样问题的主题,但是我找不到代码中有什么问题。这是头文件:Ubuntu上的段错误(核心转储)
#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);
}
我试图找出在我的错误是,但我使用C++初学者。 我认为我的“出队”方法出了问题,在尝试修复之后,它仍然是一样的。
一个我看到的是,传递给memcpy的大小应该是最小的一个新的数组的大小或旧的阵列 – NathanOliver 2015-04-04 20:17:16
这是一个可笑的危险的和邪恶的默认构造函数。 – 2015-04-04 20:21:05
你并没有真正问过一个具体的问题。你为什么觉得有什么不对?你有什么问题?你究竟在做什么来获得分段错误?你有没有得到核心转储?你有分析过吗? – 2015-04-04 20:23:38