Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中为数组动态分配内存_C_Arrays_Malloc - Fatal编程技术网

在C语言中为数组动态分配内存

在C语言中为数组动态分配内存,c,arrays,malloc,C,Arrays,Malloc,我将内存分配给了一个数组(使用malloc),但是如果它需要更多的空间,那么以后在程序中是否可以扩展该数组呢?或者创建一个新数组,让第一个数组中的最后一个元素指向新数组? 我知道realloc会更容易使用,但我只尝试使用malloc是的,您可以使用realloc()。不过,在将返回值分配给原始指针之前,请小心检查返回值。请参见此处:是的,您可以使用realloc()。不过,在将返回值分配给原始指针之前,请小心检查返回值。请参见此处:一般算法为 allocate array of 100 whil

我将内存分配给了一个数组(使用
malloc
),但是如果它需要更多的空间,那么以后在程序中是否可以扩展该数组呢?或者创建一个新数组,让第一个数组中的最后一个元素指向新数组?

我知道
realloc
会更容易使用,但我只尝试使用
malloc

是的,您可以使用
realloc()
。不过,在将返回值分配给原始指针之前,请小心检查返回值。请参见此处:

是的,您可以使用
realloc()
。不过,在将返回值分配给原始指针之前,请小心检查返回值。请参见此处:

一般算法为

allocate array of 100
while more input
    if no-room-in-array
        allocate another array 100 bigger than the current array
        copy values from current array into newly created array
        free(current array)
        current array = newly created array (the one you copied into)
    // now there will be room, so
    put input in array

一般算法是

allocate array of 100
while more input
    if no-room-in-array
        allocate another array 100 bigger than the current array
        copy values from current array into newly created array
        free(current array)
        current array = newly created array (the one you copied into)
    // now there will be room, so
    put input in array

传递给
malloc()
的大小错误

代码应该传递
n*sizeof(int)
,而不是传递
n
字节

其他想法包括

1) 不用投

    int *array1 = (int *) malloc(...;
    int *array1 = malloc(...);
2) 使用
memcpy()简化

7) 检查是否存在
malloc()
故障

int *newArray = malloc(newsize);
if (newArray == NULL && newsize > 0) Handle_Failure();

传递给
malloc()
的大小错误

代码应该传递
n*sizeof(int)
,而不是传递
n
字节

其他想法包括

1) 不用投

    int *array1 = (int *) malloc(...;
    int *array1 = malloc(...);
2) 使用
memcpy()简化

7) 检查是否存在
malloc()
故障

int *newArray = malloc(newsize);
if (newArray == NULL && newsize > 0) Handle_Failure();


要更改大小,请查看realloc,我尝试在不使用realloc的情况下执行此操作。请查看memcpy的手册页,而不是复制for循环中的元素。但是,是的,这是正确的想法。我对您正在使用malloc的行
newArray=newArray(array1)
感到困惑,所以我不确定这意味着什么。因此,不要强制转换malloc返回的void指针。如果您绝对必须这样做,那么请确保您
#include
来更改reallolic的大小。我正在尝试在不使用realloc的情况下仅查看memcpy的手册页,而不是复制for循环中的元素。但是,是的,这是正确的想法。我对您正在使用malloc的行
newArray=newArray(array1)
感到困惑,所以我不确定这意味着什么。因此,不要强制转换malloc返回的void指针。如果你绝对必须这样做,那么请确保你像我说的那样包括我不能使用的
realloc@user2737810:您在哪个平台上不能使用realloc()?程序规范不允许使用realloc,就像我说的我不能使用realloc@user2737810:您在哪个平台上不能使用realloc()?程序规格不允许更改您的问题。如果您需要添加某些内容,请添加它。不,不需要,我对当前数组=新创建的数组(您复制到的数组)的实现是错误的。我不确定你为什么不改变你的问题。如果您需要添加某些内容,请添加它。不,不需要,我对当前数组=新创建的数组(您复制到的数组)的实现是错误的。不太清楚为什么