2

私が次の状況にあるとしましょう(いくつかの大まかな擬似コード):

struct { 
  int i;
} x

main(){
  x** array = malloc(size of x pointer); // pointer to an array of pointers of type x
  int* size = current size of x // (initally 0)
  add(array, size);
}

add(x** array, int* size){ // adds one actual element to the array
  x** temp = realloc(array, (*size)+1); // increase the array size by one
  free(array);
  array = temp;

  // My question is targeted here
  array[*size] = malloc(size of x); // makes a pointer to the value 
  array[*size]->i = size;
  *size++;  
}

私の質問は次のとおりです。add()が終了すると、配列に格納されているポインターの値は、func()内に割り当てたため、関数呼び出しスタックとともに消えますか?私は彼らがそうするかもしれないのではないかと恐れています。その場合、私が物事を行うためのより良い方法があるでしょうか?

4

1 に答える 1

1

いいえ、ありません。それらは、によって返されるポインタがmalloc()対応する関数に渡されるまで存続しfree()ます。malloc()自動配列と同じように機能する場合、関数が存在しても意味がありません。

編集:補足。@Ancurioがポインタを外すと、以前に返されmalloc()たポインタの背後にあるメモリが誤って解放されます。このポインタは、その時点でrealloc()使用されていたため無効です。そうしないでください。realloc()その仕事を適切に行います。)

于 2012-10-21T07:13:38.640 に答える