2015-04-04 133 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