说,我想要一个最大长度为20的单词数组。我从用户输入中获取要存储的单词数。声明上述数组的内存效率最高的方法是什么?
我可以做这样的事情,但我猜它的内存效率不高?
char wordArray[1000][20];
那就是我希望“1000”根据用户的输入而变化。我不能这样做。
int main()
{
int size;
printf("Enter size: ");
scanf("%d", &size);
char wordArray[size][20];
}
答案 0 :(得分:4)
通常堆栈大小很小,您无法在堆栈上分配如此大量的内存。这样做会导致堆栈溢出。你需要动态分配。
int size;
printf("Enter size: ");
scanf("%d", &size);
char **wordArray = malloc(size*sizeof(char *));
for(int i = 0; i < size; i++)
wordArray[i] = malloc(20);
致电free
取消分配。
但是,请注意,与2D数组的情况不同,这将分配碎片整理的内存而不是连续的。要获得连续的内存分配,可以使用指向数组的指针作为
int (*wordArray)[20] = malloc(size * sizeof(*wordArray));
并以wordArray[i][j]
的形式访问该元素。
有关更详细的说明,请参阅c-faq 16.6: How can I dynamically allocate a multidimensional array?
答案 1 :(得分:2)
不,不是,因为你正在分配100000倍sizeof(char)
的内存。不,你不能像在这里写的那样做,因为在编译期间,数组的大小是未知的,因此无法分配空间。您可以使用malloc
。