2017-10-05 76 views
2

我的代碼有問題。問題是即使我的程序一直運行,它仍然崩潰。我的IDE沒有讓我反感,也沒有指出爲什麼我的程序最終失敗了,所以我導致我相信有一些事情出界或者讓我的東西搞砸了。我查看了我的代碼,沒有任何內容出現在界限之外,所以我對這個問題完全感到困惑。數據管理錯誤C++

我正在使用我創建的頭文件,包含頭文件中的函數的文件以及主方法文件。該錯誤是包含我的函數的文件的結果。

我的類的字段是 大小 - 詮釋

低 - 詮釋

高 - 詮釋

windowSize - 詮釋

* filteredArray - INT

陣列[] - int

她e是頭文件:

#ifndef FILTER_HPP_ 
#define FILTER_HPP_ 
#include<iostream> 


class Filter { 
    int size; 
    int high; 
    int low; 
    int windowSize; 
    int *filteredArray; 
    int array[]; 
    public: 
     // Constructor 
     Filter(int windowSize); 
     // Methods 
     void randArrayGen(); 
     int* randArrayGenRecurHelper(int arrayRecur[], int count); 
     void randArrayGenRecur(); 
     void printArrays(); 
     int hanning(int ar[]); 
     void hanningFilter(); 
     void graphicArrays(); 
     int getSize(); 
     int getHigh(); 
     int getLow(); 

}; 





#endif /* FILTER_HPP_ */ 

下面是代碼:

#include "Filter.hpp" 
#include <iostream> 
#include <time.h> 
#include <stdlib.h> 
#include <cmath> 
#include <array> 
#include <string> 
#include <cstring> 
using namespace std; 

// Constructor 
Filter::Filter(int num){ 
    size = ((rand() % 25) + 25); 
    high = ((rand() % 6) + 5); 
    low = ((rand() % 6) + 5) * -1; 
    windowSize = num; 
    randArrayGen(); 
    hanningFilter(); 

} 


void Filter::randArrayGen(){ 
    for(int i = 0; i < size;i++){ 
     array[i] = (rand() % (high + low * -1)) + low; 
    } 
} 




int Filter::hanning(int ar[]){ 
    int weightAvg; 

    if(windowSize == 3){ 
     weightAvg = (ar[0] + ar[1] * 2 +ar[2])/4; 
    } 
    else if(windowSize == 5){ 
     weightAvg = (ar[0] + ar[1] * 2 + ar[2] * 3 + ar[3] * 2 + ar[4])/9; 
    } 
    else if(windowSize == 7){ 
     weightAvg = (ar[0] + ar[1] * 2 + ar[2] * 3 + ar[3] * 4 + ar[4] *3 + ar[5] * 2 + ar[6])/16; 
    } 
    else if(windowSize == 9){ 
      weightAvg = (ar[0] + ar[1] * 2 +ar[2] * 3 + ar[3] * 4 + ar[4] * 5 + ar[5] * 4 + ar[6] * 3 + ar[7] * 2 + ar[8])/25; 
     } 
    else{ 
     weightAvg = 0; 
    } 
    return weightAvg; 
} 



void Filter::hanningFilter(){ 
    filteredArray = new int[size]; 
    for(int i = 0; i < size; i++){ 
     if(i - (windowSize/2) < 0 or i + (windowSize/2) > size - 1){ 
      filteredArray[i] = 0; 
     } 
     else{ 
      filteredArray[i] = hanning(&array[i-(windowSize/2)]); 
     } 
    } 
} 



int Filter::getHigh(){ 
    return high; 
} 

int Filter::getLow(){ 
    return low; 
} 

int Filter::getSize(){ 
    return size; 
} 
+0

如何分配'array'?特別是'new int [.. what size ..?]'行。 –

+0

如果你給出了代碼應該做什麼的總結,那將是很好的。 – Lamar

+0

我通過代碼檢查,發現我根本沒有分配它......但它仍然有效。 –

回答

2

你不爲你的數組分配內存:

int array[]; 

當你索引它想:

for(int i = 0; i < size;i++){ 
    array[i] = (rand() % (high + low * -1)) + low; 
} 

you invoke 未定義的行爲,因爲您超出了界限(例如請求第一個元素,但是來自未知大小的數組)。

你可以具有固定大小聲明數組,這樣例如:

int array[100]; 

然而,由於這是C++,可以考慮使用std::vector。一個直接的好處是你不必爲靜態分配的數組硬編碼一個大小,但是當數據被插入/推入時,你可以依靠矢量的大小進行調整。

+0

或者,因爲它是C++,所以始終使用'std :: vector array;'。 –