在c中创建动态数组

时间:2016-01-21 18:01:25

标签: c arrays dynamic

我正在尝试创建一个大小为32的动态数组,然后从某个文件中读取整数,并将它们存储在数组中。当数组被填满时,然后将其大小加倍(创建另一个大小的两倍,从旧数组复制元素并释放旧数组)直到输入文件耗尽。

以下是代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

#define limit 32

int main (int argc, char *argv[]) {

    FILE *file = fopen ("myFile1.txt", "r");
    int i = 0, num;
    int *B, *C;

    B = malloc (sizeof (int) * limit);

    while (fscanf (file, "%d", &num) > 0) {
        if (i < limit) {
            B[i] = num;
            i++;
        }
        else {
            C = malloc (sizeof (int) * 2 * limit);
            memcpy (C, B, limit * sizeof (int));
            free (B);

            B = C;
            B[i] = num;
            i++;
            limit = limt * 2;
            i++;
        }
    }
    return 0;
}

我收到如下错误:“左值作为分配左操作数”和第二个:“分段错误”。

因为,我正在尝试探索与动态数组相关的新可能性,以增加我的知识;通过修改代码来帮助我。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

您可以使用realloc()实际为阵列分配更多内存:

void *realloc(void *ptr, size_t size)

而不是这样做:

  {
    C=malloc(sizeof(int)*2*limit);
    memcpy(C,B,limit*sizeof(int));
    free(B);
    B=C;
    B[i]=num;
            i++;
            limit=limt*2;
    i++;
       }

您可以这样做:

B = realloc(B,new_size_in_bytes);

谈论你的代码:

预处理器命令#define将替换每个出现的单词&#34; limit&#34;在编译之前使用与之关联的值(在本例中为32)。因此,您无法在运行时更改宏的值。如果您希望这样做,我的建议不是定义限制,而是使用变量。 关于段错,我没有。请务必将文件名为&#34; myFile1.txt&#34;在.c文件所在的同一文件夹中,还要检查是否拼写错误。