私はプロジェクトの途中で、 and を使用しようとしていmalloc()
ますrealloc()
。malloc すると機能することはわかっていますが、realloc を使用すると、割り当てられたメモリの量はまったく変わりません。realloc は、既に割り当てられているメモリを再割り当てします。
ここに私が持っているものがあります:
これには以下が含まれます。
#include <stdlib.h>
私は構造体を持っています:
struct student {
int age;
int numOfClasses;
int gender; //0 male; 1 female
} student;
malloc を使用してこれらの構造体を 7 つ作成する場合は、次のコード行を使用します。
student stud* = (structure*) malloc(7*sizeof(student));
この行は機能します。そのコード行は構造体のサイズを取り、それを 7 倍します。要するに、これは 7 つの構造体の配列を作成するのに十分なメモリを取得します。
これを 8 に変更したい場合、A
は以前に割り当てられたメモリ、B
は新しい割り当てられた (または再割り当てされた) メモリです。
コードでの使用方法は次のとおりです。
stud = (student*)realloc(stud, 8*sizeof(student));
私の知る限り、realloc は 2 番目のパラメーターで変数を受け取り、その量のメモリを malloc します。次に、ポインター (または以前に malloc された) を取得し、malloc されたばかりのメモリに、指定されたポインターから可能な限り多くのデータを格納します。もちろん、2 番目のパラメーターは、以前に割り当てられたサイズよりも大きくなければなりません。そうしないとstud
、最後にメモリがいくらか失われます。これが私の問題です。上記の行を呼び出しても、何も変わりません。mallocされた配列の長さはまだ7です。また、再割り当てするのに十分なメモリがあることも確信しています。
私はこれを正しく行っていますか?私の問題はどこにあるのでしょうか?