非常に基本的な方法で realloc を実装するのに問題があります。
**ret でメモリの領域を拡張しようとしています。これはret = realloc(ret, newsize);
、デバッグ文字列に基づいて構造体の配列を指しています。ループの過程で newsize が正しく増加していることがわかっています (元のサイズの 4 から8 から 12 など)、しかし、私が行うsizeof(ptr)
と、元のサイズの 4 が返され、新しく割り当てられたスペースに配置しようとしているものが見つかりません (私はそれをに絞り込んだと思います) realloc() これが、質問をこのようにフォーマットしている理由です)
問題がすぐに明らかにならない場合は、関数全体を投稿できます。宿題で「ごまかし」すぎないようにしているだけです(とにかく、コードは現在、printfを多用しているため、ちょっと面倒です) () デバッグ用)。
[編集]さて、あなたの答えに基づいて、コードのデバッグに失敗しているので、関数全体を投稿して、私が間違っていることについて詳しく教えてください。
(そのほとんどは動作していないデバッグであるため、printf() は無視できます)
Booking **bookingSelectPaid(Booking **booking) {
Booking **ret = malloc(sizeof(Booking*));
printf("Initial address of ret = %p\n", ret);
size_t i = 0;
int numOfPaid = 0;
while (booking[i] != NULL)
{
if (booking[i]->paid == 1)
{
printf("Paying customer! sizeof(Booking*) = %d\n", (int)sizeof(Booking*));
++numOfPaid;
size_t newsize = sizeof(Booking*) * (numOfPaid + 1);
printf("Newsize = %d\n", (int)newsize);
Booking **temp = realloc(NULL, (size_t)newsize);
if (temp != NULL)
printf("Expansion success! => %p sizeof(new pointer) = %d ret = %p\n", temp, (int)sizeof(temp), ret);
ret = realloc(ret, newsize);
ret[i] = booking[i];
ret[i+1] = NULL;
}
++i;
printf("Sizeof(ret) = %d numOfPaid = %d\n", (int)sizeof(ret), numOfPaid);
}
return ret; }
[EDIT2] --> http://pastebin.com/xjzUBmPg
[EDIT3] 明確にするために、printf、一時ポインター、およびその性質のものはデバッグであり、意図した機能の一部ではありません。私を困惑させている行は、またはのいずれかrealloc(ret, newsize);
ですret[i] = booking[i]
基本的に、予約には NULL で終わる構造体のテーブルが含まれていることは確かです。特定の値が 1 (有料) に設定されているものを新しいテーブルに持ち込もうとしています。これが私の main() です。この関数から取得しようとしています...では、どこが間違っているのでしょうか?