当我在将数组声明为时遇到分段错误时,我正在做一个问题:
long long ways[max+1];
在哪里,
unsigned int max = findMax(l,T); // l is an unsigned int array and T is an int.
findMax 是以下类型的函数:
unsigned int findMax(unsigned int arr[],int size)
我该如何解决这个问题?
当我在将数组声明为时遇到分段错误时,我正在做一个问题:
long long ways[max+1];
在哪里,
unsigned int max = findMax(l,T); // l is an unsigned int array and T is an int.
findMax 是以下类型的函数:
unsigned int findMax(unsigned int arr[],int size)
我该如何解决这个问题?
一个可能的原因是数组对于堆栈来说太大了。
到目前为止,典型的堆栈大小为 1-16 Mb(在嵌入式系统中可能要小得多)。如果long long
是 8 个字节,则意味着分配一个包含超过 125000 个元素的数组可能会出现问题。而且您还想为其他自动变量留出空间。
不应该在堆栈上分配真正大的数组。
您可以尝试在堆中分配它:
long long *ways = calloc(max+1, sizeof *ways);
if (ways == NULL) {
// allocation failed!!
}
// Do stuff.
free(ways);