我想创建一个程序来创建包含数组的链接列表。 但是,我希望每个链接都有一个比前一个更小的数组。此时程序可以运行,但我想知道逻辑上程序是否实际上创建了较小的数组,因此没有浪费可用空间。
int main()
{
int c=3;
int d=0;
typedef struct mylist {
struct mylist *link;
int info[c-d];
}Node;
Node *a = (Node*) malloc (sizeof (Node));
a -> link = NULL;
Node *b = a;
int i=0,j=0;
while (i!=4){
while ((j)<=(2-d)){
printf("link%d array%d ",i,j);
scanf("%d",&a->info[j]);
j++;
}
j=0;
if (i !=3 ){
a -> link = (Node*) malloc (sizeof (Node));
a = a -> link;
}
d++;
i++;
}
d=0;
a = b;
while (a != NULL){
while ((j)<=(2-d)){
printf("%d ->", a->info[j]);
j++;
}
j=0;
d++;
a = a -> link;
}
a=b;
printf(" the end");
return 0;
}
最佳答案
首先,您没有free()
您分配的内存,请务必注意这一点。
现在,您问是否没有使用任何额外的内存 - 阅读您的代码对我们来说非常困难,正如您在评论中看到的那样。自己尝试一下总是一个好主意 - 使用 sizeof() 运算符或检查您的值来找出结构初始化期间占用的内存大小。
但是,我认为您的代码无法正常工作,因为您正在静态初始化数组大小。由于这些值是在编译时确定的,因此完全没问题。然而,问题是你一开始就已经决定了int数组的大小。
如果要使用动态分配内存,则需要使用malloc()
函数。创建新节点时,您还必须为其中的数组分配内存(并计算要给它的大小)。这也将解决您不知道数组大小或不太确定数组大小的问题 - 因为您明确声明要为数组分配多少内存。
不过只是一个小小的补充。例如,当分配 20 字节内存时,操作系统不会专门为您提供 20 字节 - 您将获得整个页面,这通常会比所需的内存更多。因此,除非您使用的设备正确控制内存非常重要,或者您正在使用巨大的内存,否则您不需要过度考虑 4 个 int 和 3 个 int 数组的大小差异。
关于c - 每个链接列表都有较小的数组,这在 C 中有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746598/