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 回答