遇到SDL两个问题

在开发thinkvd软件中,用的是SDL,实际应用中遇到了不少问题,有时想把它换掉。

今天又遇到两个比较麻烦的问题:

1。多窗口时,其中一个窗口图象不显示

2。内存泄漏,每次播放都会增加0.3--0.5M。

 

问题一:

在SDL函数SDL_Texture *SDL_CreateTexture(Uint32 format, int access, int w, int h)中

texture = (SDL_Texture *) SDL_calloc(2, sizeof(*texture));

若连续createTexture时,有时返回同一指针,它是调用了

void *dlcalloc(size_t n_elements, size_t elem_size)

{

    void *mem;

    size_t req = 0;

    if (n_elements != 0) {

        req = n_elements * elem_size;

        if (((n_elements | elem_size) & ~(size_t) 0xffff) &&

            (req / n_elements != elem_size))

            req = MAX_SIZE_T;   /* force downstream failure on overflow */

    }

    mem = dlmalloc(req);

    if (mem != 0 && calloc_must_clear(mem2chunk(mem)))

        memset(mem, 0, req);

    return mem;

}

为什么有时是同一指针,原因不明。出现的概率比较小,于是采用了尽可以少调用SDL_CreateTexture方法来解决.

 

问题二:内存泄漏

这个问题一直就知道,以前用的是固定播放窗口,问题不严重,此次改用了可更改播放窗口大小,问题就显现出来的。反复播放多次,应用程序内存很快就达到100M以上。

反复跟踪测试,先排除了createTexture内存泄漏问题,再看createWindow相关的,最后发现调用dx9的IDirect3DDevice9_Release(data->device);没有释放掉, 跟踪方法是用它在分配内存的位置后面调用,看是否能正常释放

 

thinkvd dvd and convert converter mpeg video sdl ppt c++

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值