以下代码对我造成了段错误。
#include <stdio.h>
int main(int argc, char **argv)
{
const int MEMSIZE = 1024*1024*10;
char memblock[MEMSIZE];
memblock[10] = '\0';
printf("%s", memblock);
return 0;
}
字符数组有大小限制吗?我忘记了我所有的C,我在这里做了什么愚蠢的事情吗?
以下代码对我造成了段错误。
#include <stdio.h>
int main(int argc, char **argv)
{
const int MEMSIZE = 1024*1024*10;
char memblock[MEMSIZE];
memblock[10] = '\0';
printf("%s", memblock);
return 0;
}
字符数组有大小限制吗?我忘记了我所有的C,我在这里做了什么愚蠢的事情吗?
用这个小程序发现你的最大堆栈大小是多少,并检查你的数组是否更大
#include <stdio.h>
#include <sys/resource.h>
int main ()
{
struct rlimit rl;
int result = getrlimit(RLIMIT_STACK, &rl);
printf("max stack size: %u\n", rl.rlim_cur);
}
结果在我的主机上
max stack size: 10485760
局部变量存储在堆栈中,显然,它们不能大于他的最大大小
char 数组的大小没有限制,但与可用堆内存相比,堆栈大小将受到相对限制。你可能在这里溢出了堆栈。您可以尝试制作memblock
静态
static char memblock[MEMSIZE];
或动态分配
char* memblock = malloc(MEMSIZE);
if (memblock == NULL) {
printf("Error: failed to allocate %d byte buffer\n", MEMSIZE);
return -1;
}
memblock[10] = '\0';
printf("%s", memblock);
free(memblock);