'What is the risk of using struct dataContent decimate(struct dataContent)?

I have written the following code to retrieve the content from the audio file. This is just part of the full project. I just want to know Would there be any risk using struct dataContent decimate(struct dataContent)? If yes, what are these and how can I improve this code to reduce the risk?

   struct dataContent
    {
        DoubleArrayPtr data;
        DoubleArrayPtr memorydata;
        int numberofvalues;
        int datasize;
        long int sizeoffile;
    };

struct dataContent decimate(struct dataContent dataprocess)
{
    
    int i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, p = 0, q = 0, r = 0, s = 0, t = 0; 
    
    cout << "Total number of blocks is: " << dataprocess.datasize << endl;
    
    size_t size = dataprocess.datasize; 

    vector<double> sum(size); 
    vector<double> mean(size); //The mean is the arithmetic average of a set of given numbers
    vector<double> secondmoment(size); //
    vector<double> fourthmoment(size);
    vector<double> kurtosis(size);
    
    sum[0] = 0.0;
    secondmoment[0] = 0.0;
    fourthmoment[0] = 0.0;
    kurtosis[0] = 0.0;
    
    
    // Finding statistical moments for the data: mean, second- and fourth-order moments, and kurtosis
    for(j = 0 ; j < size ; ++j)
    {
        
        // Mean Value
        for(i = k ; i < (k + BUFFER_SIZE) ; i++)
        {
            sum[j] = sum[j] + abs(dataprocess.memorydata[i]);
            //sum[j] = sum[j] + dataprocess.memorydata[i];

        }
        
        mean[j] = sum[j] / BUFFER_SIZE;
        cout << "The mean of the absolute value of data in block " << (j + 1) << " is: " << mean[j] << endl;
        k = k + BUFFER_SIZE;
        
    
    }

    return dataprocess;
        
} // End of decimate()

Thanks for your time.

c++


Solution 1:[1]

the obvious issue is that you have BUFFER_SIZE and stride along the data array in those size pieces with no concern about running off the end.

I assume DoubleArrayPtr is double *, why not vector<double> given that you use vector elsewhere.

Also dont do this

  int i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, p = 0, q = 0, r = 0, s = 0, t = 0; 

create an initialize at the point of use

like this

for(int j = 0 ; j < size ; ++j)

in c++ structs are types so you can do this

dataContent decimate(dataContent dataprocess)

pass in a reference to the struct thos, at the moment you are copying it

dataContent decimate(dataContent &dataprocess)

all this needs to be in codereview really tho

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 pm100