当我尝试初始化一个大型的二维字符数组时,它工作得很好。但是当我添加一个简单的打印命令时,它给了我一个分段错误。关于为什么会发生这种情况有什么想法吗?
#include<stdio.h>
int main(void)
{
printf("!");
char f[10000][10000];
}
没有 printf 命令,或者即使 printf 命令不打印任何内容(即“”),它也可以正常工作。如果我让它打印任何东西,它就会给出错误。
有什么帮助吗?
这可能是因为你超出了堆栈。你的定义f
占用 100MB 堆栈空间(10000x10000 字节),并且可能一旦您实际使用堆栈,系统就会发现堆栈上没有那么多空间和段错误。调用任何其他函数时您可能会发现同样的情况。
该大小的分配应通过 malloc() 完成。
char *f= malloc(10000*10000);
// access two dimensionally (equivalent of f[5][8])
char z= f[5*10000 + 8];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)