我想创建一个程序来创建包含数组的链接列表。 但是,我希望每个链接都有一个比前一个更小的数组。此时程序可以运行,但我想知道程序是否实际上是在创建更小的数组,因此不会浪费任何可用空间。
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;
}
答案 0 :(得分:0)
首先,你不是free()
你分配的记忆,确保你照顾它。
现在,你在问你是否没有使用任何额外的内存 - 阅读你的代码对我们来说非常困难,正如你在评论中看到的那样。自己尝试一下总是一个好主意 - 找出结构初始化期间占用的内存大小,或者使用sizeof()运算符,或者检查你的值。
但是,由于您静态初始化数组大小,我认为您的代码无法正常运行。由于值是在编译时确定的,因此完全没问题。但是,问题是您已经在开始时确定了int数组的大小。
如果要使用动态内存分配,则需要使用malloc()
功能。创建新节点时,您还必须为其中的数组分配内存(并计算要为其提供的大小)。这也将解决你不知道数组大小或不确定它的问题 - 因为你明确地声明了为数组分配了多少内存。
虽然只是一小部分。在分配例如20字节的内存时,操作系统不会特别为您提供20个字节 - 您将获得整个页面,这通常会占用更多内存。因此,除非您正在使用正确控制内存非常重要的设备,或者您正在使用大容量内存,否则您不需要过度考虑4个整数和3个整数的数组大小的差异。