如何使用 realloc 给出大小?

How to give a size using realloc?

我的代码运行不清晰。我想给指针一个随机大小,我想向指针添加一些元素。我想给指针留足够大的地方。例如,如果我在指针中有 10 个元素,我想将 40 个字节的位置分配给指针。但是当我查看我的代码时,最初我为元素提供了如此大的尺寸。我想看到输出:

67
11
64
7

67
11
64
7
23
81
88
35
12
5
7

内存大小=40

#include <stdio.h>
#include <stdlib.h>
int main() {
    
    int *k;
    int i=0,j=0,t=0;
    int array[20]={67,11,64,7};
    
    k=malloc(5*sizeof(int));
    k=array;
    for(i=0;i<4;i++){
        printf("%d\n",k[i]);
    }
    
    k=realloc(k,50*sizeof(int));
    
    k[4]=23;
    k[5]=81;
    k[6]=88;
    k[7]=35;
    k[8]=12;
    k[9]=5;
    k[10]=7;
    for(j=0;k[j]!='[=11=]';j++){
    
    printf("%d\n",k[j]);
    }
    
    k=realloc(k,(j+1)*sizeof(int));
    
    for(t=0;k[t]!='[=11=]';t++){
        
        printf("%d\n",k[t]);
    }
    
    printf("the size of the memory=%d \n",j*4);
    printf("the size of the memory=%d \n",t*4);

    return 0;
}

您无法调整像 array 这样的自动变量的大小,这是您尝试做的事情,因为您这样做 k=array;(并泄漏之前分配的内存)。

您可以将数据从 array 复制到 k 指出的已分配内存中:

int array[20] = {67, 11, 64, 7};
int *k = malloc(sizeof array);
memcpy(k, array, sizeof array);

虽然您使用的循环条件有点令人困惑:

for (j = 0; k[j] != '[=11=]'; j++)

我建议与 0 进行比较。

您最后打印的“内存大小”并不准确。最后分配的内存大小为(j+1)*sizeof(int),即12 * sizeof(int),因为k[11]是第一个元素0

还有一个警告:您的程序当前已定义行为,因为数组在位置 [11, 19] 中确实包含 0:s。请注意,由 realloc 分配的额外内存包含不确定的值,因此如果您的原始数组只有 11 个元素大,您在与 [=24=] (或者最好是 0) 你永远不会知道结果会是什么。它可以继续搜索 [=24=] 越界。

注意:完成后不要忘记free(k);