linux中c char数组的的限制是多少?

odin2006 2008-05-29 09:42:16
因为要pingpong测试, 所以需要用到一个很大的数组, 于是发现在linux上的数组的大小有个最大限制, 我得到的限制是一个数组最多能有999999个元素, 超过这个限制, 就会报错: Segmentation fault.
下面是我的源程序和测试环境, 请知情者相告.


#include<stdio.h>
int main(int *argc, char *argv[])
{

printf("the argv[1] is :%s\n ", argv[1]);
long int array_size = (long int)atoi(argv[1]);
char my_array[array_size];
printf("the size of my_array is : %ld \n", sizeof(my_array));
}

**@compu:~/cProg$ ./myarray 9000000
the argv[1] is :9000000
Segmentation fault
测试环境:
Debian GNU/Linux 3.1 2.6.8-3
gcc version 3.3.5 (Debian 1:3.3.5-13)
...全文
456 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
odin2006 2008-06-01
  • 打赏
  • 举报
回复
谢谢各位前辈指点. 我已经找到了解决办法, 也了解了内存区中堆与栈的区别. http://blog.cnii.com.cn/?92337/viewspace-18177.html, 这篇文章里面有关于堆, 栈的详细比较.

现在程序改为如下, 就可以了.

#include<stdio.h>
int main(int *argc, char *argv[])
{

printf("the argv[1] is :%s\n ", argv[1]);
long int array_size = (long int)atoi(argv[1]);
//char my_array[array_size];
char *pbuffer=NULL;
//这里在堆区动态分配了内存
pbuffer = (char *)malloc(array_size*sizeof(char));
//new char[array_size];
if(NULL == pbuffer)
{
exit(1);
}else
{
printf("the size of pbuffer is : %ld \n", array_size);
}
// printf("the size of pbuffer is : %ld \n", sizeof(pbuffer));
//释放内存
free (pbuffer);
pbuffer = NULL;

}
ForestDB 2008-05-30
  • 打赏
  • 举报
回复
去查查编译器默认的stack的大小。
shuiyan 2008-05-29
  • 打赏
  • 举报
回复
这个贴NB,前三楼全是带星的。

学习。

测试数组为什么是在argv[]中传入,而不是直接在程序中申请?

对了,顺便也问一下,在程序中直接申请的数组,最大多少呢?
大大怪老张 2008-05-29
  • 打赏
  • 举报
回复
那是因为栈溢出了。

如果数据很多的话,最好在堆上分配

char * pbuffer;

pbuffer = new char[1024*1024*1024];

///

delete [] pbuffer;
iambic 2008-05-29
  • 打赏
  • 举报
回复
用堆。
jixingzhong 2008-05-29
  • 打赏
  • 举报
回复
取决于栈的大小,不过可以设置
  • 打赏
  • 举报
回复
局部变量的话 得看栈的大小
一般2M
飞哥 2008-05-29
  • 打赏
  • 举报
回复
是不是得看看栈有多大啊

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧