0

重複の可能性:
C でポインターから配列のサイズを取得するにはどうすればよいですか?
malloc() を使用して割り当てられたメモリ ブロックのサイズを取得するにはどうすればよいですか?

void func( int *p)
{
      // Add code to print MEMORY SIZE which is pointed by pointer p.
}
int main()
{
      int *p = (int *) malloc(10 * sizeof(int));
      func(p);
}

func() のメモリポインタ P から MEMORY SIZE を見つけるにはどうすればよいですか?

4

2 に答える 2

2

C では移植可能な方法でこれを行うことはできません。どこにも保存されない可能性があります。malloc()要求したよりもはるかに大きな領域を予約する可能性があり、要求した量に関する情報を保存する保証はありません。

malloc(ARRAY_LEN * sizeof(int))またはなどの標準サイズを使用するかmalloc(sizeof mystruct)、ポインターを使用して情報を渡す必要があります。

struct integers {
    size_t count;
    int *p;
};

void fun(integers ints) {
    // use ints.count to find out how many items we have
}

int main() {
    struct integers ints;
    ints.count = 10;
    ints.p = malloc(ints.count * sizeof(int));
    fun(ints);
}
于 2012-12-05T06:12:52.343 に答える
0

ポインターに割り当てられたメモリを見つける組み込みのロジックはありません。ブライアンが彼の答えで述べたように、それを行うための独自の方法を実装する必要があります。

はい、Linux の valgrind などのツールを使用してメモリ リークを見つけることができます。また、solaris にはライブラリ libumem.so があり、これには findleaks という関数があり、プロセスが実行中の状態でどれだけのメモリ リークが発生したかがわかります。

于 2012-12-05T06:24:24.160 に答える