1

reallocを試しましたが、機能しませんでした

これがコードです。ご協力いただきありがとうございます

trial = malloc (4 * sizeof(int));

trial[0] = 1; trial[1] = 4;trial[2] = 7;trial[3] = 11;

trial = (int*)realloc(trial, sizeof(int) * 5);
trial[sizeof(trial)-1] = 23;

int a;
for(a = 0; a < sizeof(trial); a++){
        printf("TRIAL %d \n", trial[a]);
}

そして、出力は次のようになります

TRIAL 1 
TRIAL 4 
TRIAL 7 
TRIAL 23 

そのはず

TRIAL 1 
TRIAL 4 
TRIAL 7 
TRIAL 11
TRIAL 23 
4

5 に答える 5

6

問題はsizeof、配列に含まれる要素の数がわからないことです。ポインタ(最初の要素を指す)が占めるスペースの量を示します。つまりsizeof(trial) == sizeof(int*)、要素の数ではありません。長さは別に保管する必要があります。

于 2010-11-01T02:10:50.273 に答える
2

sizeofは、ポインタのサイズであるsizeof(int *)を返します。ポインタのサイズを個別に追跡する必要があります。

また、再割り当てするポインタにrealloc()を返さないでください。reallocがNULLを返す場合、ポインターは変更されず、失われます。次のように一時ポインタを使用することをお勧めします。

int *p;
int *tmp;
/*...*/
tmp = realloc(p, NEW_SIZE);
if (tmp != NULL) p = tmp;
else { /*...*/ }
于 2010-11-01T02:10:05.420 に答える
2

sizeof()動的に割り当てられたメモリでは、割り当てられたブロックのサイズではなく、タイプのサイズのみが返されます。したがってsizeof(trial)、この場合は、のサイズである4が返されint*ます。

于 2010-11-01T02:10:23.757 に答える
1

sizeofは型のサイズを返します。この場合、私が想定しているint*のサイズは4バイトです。したがって、配列のサイズを5にしますが、要素(4-1)を23に設定します。変数を使用して配列のサイズを追跡する必要があります。

于 2010-11-01T02:09:21.510 に答える
1

sizeof(trial)==定数(おそらく4または8)。割り当てた要素の数ではありません。

あなたは次のようなものが必要です

int n = 100;
trial = realloc(trial, n*sizeof(*trial));

trial[n-1] = K;  // K is some number.
于 2010-11-01T02:13:22.163 に答える