2015-08-27 2 views
-2
#include <iostream> 
#include <stdlib.h> 
using namespace std; 

float **div(float **A, float **B, int row, int column) { 
    float **D; 
    D = new float *[row]; 
    // D= (float **)malloc(sizeof(float *) * row); 
    for (int x = 0; x < row; x++) { 
    D[x] = new float[column]; 
    // D[x] = (float (*))malloc(sizeof(float) * column); 
    for (int y = 0; y < column; y++) { 
     D[x][y] = (A[x][y]/B[x][y]); 
    } 
    } 

    return D; 
} 

int main() { 
    int x = 0, y = 0, row = 20, column = 5; 
    float **N; 
    // N =(float **)malloc(sizeof(float *) * row); 
    N = new float *[row]; 
    for (x = 0; x < row; x++) { 
    N[x] = new float[column]; 
    // N[x]=(float*)malloc(row*column*sizeof(float)); 
    for (y = 0; y < (column); y++) { 
     N[x][y] = 1; 
    } 
    } 

    N = div(N, N, row, column); 
    cout << "Displaying N ..." << endl; 
    for (int x = 0; x < 10; x++) { 
    for (int y = 0; y < 5; y++) { 
     cout << N[x][y] << " "; 
    } 
    cout << endl; 
    } 
    for (int x = 0; x < 20; x++) { 
    delete[] N[x]; 
    } 
    delete[] N; 
    return 0; 
} 

Я пытаюсь освободить всю память, но она освобождается память, которую я объявленную в главной, но функция div также занимающих один и тот же память размер входного массива N и это не освобождается. Есть ли способ удалить память, которая занята функцией.Высвобождение зазубренный массив в C++

+1

Не перезаписывайте «N» новым значением, используйте переменную для возвращаемого значения. – molbdnilo

+0

Пожалуйста, открепите свой код. –

+3

Почему бы не использовать 'std :: vector >' (или 'std :: array <20, std :: array <4, float>>')? – Jarod42

ответ

0

Пожалуйста, смотрите здесь, мой пример нового и удалить int[m][n], я надеюсь, что это может помочь вам:

int main() 
{ 
    //a[m][n] 
    const int m = 5, n=6; 
    int **p = new int*[m]; 
    for(int i=0; i<m; ++i) 
     p[i] = new int[n]; 

    for(int i=0; i<m; ++i) 
     delete[] p[i]; //delete array 
    delete[] p; 
    p = nullptr; 

} 
+0

спасибо за ответ, но я прошу о том, как освободить кучную память –

+0

@CharanKumar, 'new' используется для выделения памяти кучи,' delete' используется для освобождения памяти кучи! Возможно, сначала вы должны изучить «C++ primer». – cwfighter

0

Использование std::array устранило бы управление памятью:

template <std::size_t ROW, std::size_t COL> 
using Matrix = std::array<std::array<float, COL>, ROW>; 

template <std::size_t ROW, std::size_t COL> 
Matrix<ROW, COL> div(const Matrix<ROW, COL>& A, const Matrix<ROW, COL>& B) 
{ 
    Matrix<ROW, COL> res; 
    for (std::size_t x = 0; x != ROW; ++x) { 
     for (std::size_t y = 0; y != COL; ++y) { 
      res[x][y] = (A[x][y]/B[x][y]); 
     } 
    } 
    return res; 
} 

template <std::size_t ROW, std::size_t COL> 
void display(const Matrix<ROW, COL>& m) 
{ 
    for (std::size_t x = 0; x != ROW; ++x) { 
     for (std::size_t y = 0; y != COL; ++y) { 
      std::cout << m[x][y] << " "; 
     } 
     std::cout << std::endl; 
    } 
} 

int main() 
{ 
    Matrix<20, 5> N; 
    for (std::size_t x = 0; x != 20; ++x) { 
     for (std::size_t y = 0; y != 5; ++y) { 
      N[x][y] = 1; 
     } 
    } 
    N = div(N, N); 
    std::cout << "Displaying N ..." << std::endl; 
    display(N); 
} 

Demo

+0

Спасибо за быстрый ответ, но как освободить память –

+0

@CharanKumar: с вашим прототипом вы не можете делать 'N = div (N, N, row, column);' без memleak. Вы должны выполнить 'float ** M = div (N, N, row, column);' и затем удалить как 'M', так и' N' (с вашим циклом). – Jarod42

Смежные вопросы