2015-04-04 92 views
-3

我已經閱讀了幾個關於同樣問題的主題,但是我找不到代碼中有什麼問題。這是頭文件: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++初學者。 我認爲我的「出隊」方法出了問題,在嘗試修復之後,它仍然是一樣的。

+0

一個我看到的是,傳遞給memcpy的大小應該是最小的一個新的數組的大小或舊的陣列 – NathanOliver 2015-04-04 20:17:16

+3

這是一個可笑的危險的和邪惡的默認構造函數。 – 2015-04-04 20:21:05

+1

你並沒有真正問過一個具體的問題。你爲什麼覺得有什麼不對?你有什麼問題?你究竟在做什麼來獲得分段錯誤?你有沒有得到核心轉儲?你有分析過嗎? – 2015-04-04 20:23:38

回答

3

有幾個問題

  • 默認構造函數不初始化它的成員
  • Queue::Queue(int arrSize)有一個局部變量elements,其陰影成員elements。其結果,此構造方法不初始化它的成員
  • enqueue應該複製count * sizeof(float)字節,而不是newSize字節
  • 爲@Vladimir注意到,enqueue分配超出分配的內存的一個元素。應該elements[count - 1] = element;
  • dequeue應該複製newSize * sizeof(float)字節,而不是newSize字節
+0

完全同意+隊列中的最後一行應與元素[count -1] – 2015-04-04 20:34:03

+0

謝謝,最大的問題是我的構造函數,我不知道爲什麼我沒有使用this->元素。 – Paus 2015-04-05 09:18:17