1

Visual C++ 2010 を使用しており、2 次元配列で free() を使用しようとしています。

#include <stdio.h>
#include <stdlib.h>
#define SIZE 8


int main(){

    int **matrix = (int**)malloc(sizeof(int*)*SIZE);
    int i;
    for(i=0; i<SIZE; i++){
        matrix[i] = (int*)malloc(sizeof(int)*SIZE);
    }
    for(i=0; i<SIZE; i++){
        free(matrix[i]);
    }
    free(matrix);
    getch();
    return 0;
}

私はこれを正しく行っていますか?

よろしく。

4

2 に答える 2

7

基本的には正しいはずです。

mallocところで、割り当てようとしている 2 次元配列の各行を呼び出す必要はありません(特定の理由がない限り)。

malloc1つと1つだけを使用できますfree

malloc(sizeof(int*)*ROW_NUM * COL_NUM);

単一の呼び出しを使用するmallocと、行列の要素をメモリに連続的に割り当てるという利点もあります。

于 2013-04-17T20:50:50.030 に答える
2

そのように見える。ここに示すように、(効率のために) 1 つの malloc と 1 つの free を実行できますが、おそらく実行する必要があります。

明示的に C を使用する必要がない場合は、ベクターを調べてメモリを処理する価値があるかもしれません。

于 2013-04-17T20:51:33.800 に答える