qt4.3.3在VC6中使用gb2312编码的bug

准确的说VC6在使用小内存分配时如果小内存的数量超过16MB就会出现异常,MSDN在线支持上还给出了测试例子。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *pData;
    for(int i = 0; i < 70000; ++i)
    {
        pData = (char *)malloc(32);
        pData = (char *)realloc(290);
    }
    return 0;
}
因为是使用Qt4.3.3时出的bug,开始使用的QT库不是编译安装的,不能调试也不清楚具体的原因。后来重新编译了qt才准确定位到异常点。在QT4.3.3中使用gb2312编码格式调用QString::fromLocal8Bit(const char*)时采用动态增长内存的方式(realloc),如果数据量比较大,分配的小内存数量超过了16MB就会出现异常。而采用其它的编码格式不存在这样的问题,因为他们的数据是使用malloc分配的。

你可能感兴趣的:(测试,qt)