c++builder出错提示"assertion failed"

来源:百度知道 编辑:UC知道 时间:2024/05/17 02:27:58
我想可能是定义的数组太大:
int StartA[52][232][2]={0};
int Finished[52][232][21]={0};
int UnfinishedNo[52][232][21]={0};
int FinishedNo[52][232][21]={0};
定义了这么多3维数组,是这个原因么?因为我把它们注释掉就没问题了~
我把栈的大小改大就可以了,没什么影响应该?

你的数组太大了,超出了堆栈的大小。

可以定义成static
static int StartA[52][232][2]={0};
static int Finished[52][232][21]={0};
static int UnfinishedNo[52][232][21]={0};
static int FinishedNo[52][232][21]={0};

或者动态内存分配malloc/calloc/realloc。

To:雨落深山 -

int StartA[52][232][2]={0};
int Finished[52][232][21]={0};
int UnfinishedNo[52][232][21]={0};
int FinishedNo[52][232][21]={0};

这个应该是栈吧?为什么是堆呢?
为什么加上static就可以了?
-----
能不能把完整程序贴出来,问题可能不在这,
光是凭一个assertion failed 断言失败,不好具体判断。

你的数组肯定是过大了,因为这样分配数组是在栈中分配的,但栈的大小有限(2M),所以失败,但是加上static是可以的(这个我试了),因为static是在全局区中分配的,可能是全局区比较大一点吧~
但是我推荐还是用new在分配,但是速度可能会慢一点