关于C语言中定义数组大小的问题(最多能定义多少)

我定义了一个结构structpacked_data{unsignedb0:1;unsignedb1:1;unsignedb2:1;unsignedb3:1;unsigne... 我定义了一个结构
struct packed_data
{
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
}
然后我想用这个定义个a[1000000](1M)但是C++6.0运行是报了个窗口,我想定义a[1000000]接收100KB~1M(估算)的位图图片呢,应该怎么做呢?
能不能清楚地帮我定义出来呢
展开
 我来答
kaixingui2012
2015-10-22 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6451万
展开全部
在MSDN中的array declarations有如下描述:
The type of integer required to hold the maximum size of an array is the size of size_t. Defined in the header file STDDEF.H, size_t is an unsigned int with the range 0x00000000 to 0x7CFFFFFF.

也就是说,只要硬件条件许可的条件下,数组的大小可以为0x7CFFFFFF(2G BYTE)。
数组所占空间为:count*sizeof(TYPE) , count是数组元素的个数,sizeof(TYPE) 是一个元素所占空间字节数。
如果定义数组空间超出2G,VC编译会报错:fatal error C1126: '2G' : automatic allocation exceeds 。。。
因此,当实际编程确实需要使用更大的数组时,则要采用动态定义方式(new malloc等)。
L_o_o_n_i_e
2009-04-18 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5231万
展开全部
动态分配,用虚拟存储。

#include <stdio.h>
#define array_size 1000000
void main()
{
unsigned char *a[8];
int i;
for (i=0;i<8;i++){
a[i] = (unsigned char *) malloc(array_size * sizeof(unsigned char));
}
if ( !a[7]) {
printf("No enough memory\n");
exit(1);
}
printf("pass alloc\n");
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vbtraz
2009-04-17 · TA获得超过5532个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4447万
展开全部
查了一下,这个错误是栈溢出。 栈的大小是比较有限的, 不能定义这样大的东西

需要一个大的数组的话应该定义一个指针,然后用malloc分配内存空间给他,这个是在堆上分配的,可以分配很多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangtk1982
2009-04-17 · TA获得超过3742个赞
知道大有可为答主
回答量:3206
采纳率:100%
帮助的人:1454万
展开全部
两个办法
1。定义为全局变量
2. 动态分配 C语言使用malloc C++使用new

原因就是栈是有大小的

当然也可以指定大小 不过就没有可移植性了 而且指定也有范围
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式