关于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(估算)的位图图片呢,应该怎么做呢?
能不能清楚地帮我定义出来呢 展开
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(估算)的位图图片呢,应该怎么做呢?
能不能清楚地帮我定义出来呢 展开
展开全部
在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等)。
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等)。
展开全部
动态分配,用虚拟存储。
#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");
}
#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");
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
查了一下,这个错误是栈溢出。 栈的大小是比较有限的, 不能定义这样大的东西
需要一个大的数组的话应该定义一个指针,然后用malloc分配内存空间给他,这个是在堆上分配的,可以分配很多
需要一个大的数组的话应该定义一个指针,然后用malloc分配内存空间给他,这个是在堆上分配的,可以分配很多
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两个办法
1。定义为全局变量
2. 动态分配 C语言使用malloc C++使用new
原因就是栈是有大小的
当然也可以指定大小 不过就没有可移植性了 而且指定也有范围
1。定义为全局变量
2. 动态分配 C语言使用malloc C++使用new
原因就是栈是有大小的
当然也可以指定大小 不过就没有可移植性了 而且指定也有范围
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询