见鬼了,CString.Format 居然出错

guangdang 2006-05-27 10:32:52
Format("%s,%f,%d,....",...)
以前这段代码运行的非常正常,但昨天也不知道改动了什么,就出错了。

我仔细的试验了一下,如果使用 %f(即浮点数)的个数超过或者等于3个的时候就抱错,其他的格式%d,%s无论多少个都不出错。
比如

Format("%d,%d,%d,%s,%f,%f,%s",1,1,1,"LKD",2,1.3,"hello");
这段代码用了2个%f,不出错。

但如果改成
Format("%d,%d,%d,%s,%f,%f,%f",1,1,1,"LKD",2,1.3,2.3);
这段代码用了3个%f,然后就抱错了。错误的内容似乎是CString的内存没法分配(太大了)。

虽然可以使用折中的方法解决,比如先把一个浮点数变成CString,但这样比较烦,而且程序的可读性也变差,还有原因没找到不踏实?


知道原因的进来说说
...全文
474 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
guangdang 2006-05-27
  • 打赏
  • 举报
回复
问题找到
原来是其他地方的内存使用越界。

真是见鬼了
guangdang 2006-05-27
  • 打赏
  • 举报
回复
那看看你连接时栈的大小设置的是多少。

-------------------------------------

这个内存是分配在堆上的吧

而且这些代码原来是正常的,就上天添加了一些东西,然后就出错了。

我怀疑可能是其他地方的内存使用异常引起了这个毛病。
但什么样的异常能引起 分配200个整数不出错,500个就出错了呢?
syy64 2006-05-27
  • 打赏
  • 举报
回复
那看看你连接时栈的大小设置的是多少。
guangdang 2006-05-27
  • 打赏
  • 举报
回复
我想我找到了部分原因

那就是稍微分配一个大一点的内存就出错

如int *ppp=new int[200];
正常

但是int *ppp=new int[500];
就出错了


.........
guangdang 2006-05-27
  • 打赏
  • 举报
回复
最后会调用一个叫AfxThrowMemoryException的函数
guangdang 2006-05-27
  • 打赏
  • 举报
回复

谢谢各位,只是不管后面的数字是什么,如果有3个以上的 %f, 就会抱错
飞哥 2006-05-27
  • 打赏
  • 举报
回复
路过
学习~
Kudeet 2006-05-27
  • 打赏
  • 举报
回复
Format("%d,%d,%d,%s,%f,%f,%f",1,1,1,"LKD",2.f,1.3f,2.3f);
lixiaosan 2006-05-27
  • 打赏
  • 举报
回复
str.Format("%d,%d,%d,%s,%f,%f,%f",1,1,1,"LKD",(double)2,1.3,2.3);
WecanHuang 2006-05-27
  • 打赏
  • 举报
回复
up

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧