我想创建一个大小为32的动态数组,然后从某个文件中读取整数,并将它们存储在数组中。当数组被填充时,然后将其大小加倍(创建另一个大小两倍,从旧数组中复制元素并释放旧数组),直到输入文件耗尽。在c中创建动态数组
下面是代码:
#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;
}
我得到了如下的错误:与第二届“要求作为转让的左操作数左值”:“分段错误”。因为我试图探索与动态数组相关的新可能性,以增加我的知识;通过修改代码来帮助我。
任何帮助将不胜感激。
void *realloc(void *ptr, size_t size)
而不是这样做:
请修正格式,看来你的限制变量是缺少的。 – Bruce
@Bruce他使用预处理器命令#define来“定义”极限 –
您可以调整一个数组的大小并使用'realloc()'复制其数据:'limit = limit * 2; B = realloc(B,limit * sizeof(int));'。不需要创建一个名为'C'的临时数组。 –