是否有可能在堆上分配一个数组,即使它在一个函数范围内?这是我的C程序:
void SimpleTextEditor()
{
char textEditor[1000000];
char operationText[1000002];
//do something with the arrays
}
这导致stackOverflow异常,原因很明显,我正在尝试分配两个大型数组 . 如果我将任何一个数组移到函数外部并使其成为全局(文件级变量),那么它就可以在堆上分配全局变量 .
但我不想让我的变量全局化 . 是不是可以使用malloc和calloc为数组动态分配内存?
3 回答
当然有可能:
(注意:如果需要,可以使用
1000000*sizeof(char)
,但sizeof(char)
始终为1)这是错误的假设 . 由于没有给出明确的初始化程序,因此在文件范围定义的数组可能放在data segment内,或者更具体地说放在
.bss
段内 .当然可以使用
malloc
和朋友动态分配内存 . 但是,因为在编译时已知大小,所以更好的替代方法可以将两个数组声明为static
:可以定义使用malloc()和calloc()动态分配内存 . 只需在功能中分配它们或
main()
如果你不想让它们全局化 . 处理大数据时,最好在堆上分配空间,只需要为更多数据腾出更多空间 .malloc()
时:Example:
calloc()
时:Example:
Example:
Note:
malloc()
和calloc()
都可以在错误时返回NULL
,因此最好检查它们 . 你这样检查: