我已經閱讀了幾個關於同樣問題的主題,但是我找不到代碼中有什麼問題。這是頭文件: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