VC一个MFC程序的内存分配问题!!!
我做了一个MFC程序。程序里面我定义一个数组指针,char*pstr[600],大小是600,我对每个指针元素进行new分配内存,大小为256,使用for循环,然后在对每...
我做了一个MFC程序。程序里面我定义一个数组指针,char *pstr[600],大小是600,我对每个指针元素进行new分配内存,大小为256,使用for循环,然后在对每一个元素进行存储一段字节,接着我程序区访问这些元素,当我访问到200个元素时候,读出的内容是乱码。其他地方没有对该数组进行操作。后来,我把每个元素大小设定为50,再进行读取时候就没错了。所以我不明白这样分配内存需要注意哪些???
for (int i=0;i<600;i++)
{
pstr[i] = NULL;
pstr[i] = new char[256];
if (pstr[i]==NULL)
{
gLogFile.AddRecord("malloc error!");
}
}
//每个元素比如放“abcdefghijklmn”
在读取到200个元素时候,就变成乱码了。
最后我把元素大小改成50了。pstr[i] = new char[50];
再访问时候就没事了。请高手帮忙!!!谁遇见过这问题。 展开
for (int i=0;i<600;i++)
{
pstr[i] = NULL;
pstr[i] = new char[256];
if (pstr[i]==NULL)
{
gLogFile.AddRecord("malloc error!");
}
}
//每个元素比如放“abcdefghijklmn”
在读取到200个元素时候,就变成乱码了。
最后我把元素大小改成50了。pstr[i] = new char[50];
再访问时候就没事了。请高手帮忙!!!谁遇见过这问题。 展开
4个回答
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
展开全部
pstr圣姑全局变量?
如果不是,不应该出现这样的问题。
如果不是,不应该出现这样的问题。
更多追问追答
追问
是类成员变量。我也很纳闷。哪出现问题的呢。如果是全局变量的话,是不是因为别的地方调用了?如果没调用呢。我的系统是64位的
追答
63?64?呵呵,和系统没太大关系,会模拟32位运行环境。
两个建议,一个是使用CStringArray,在MFC环境下,这个用着比较方便;
一个是,申请整块内存空间,不要分600次申请。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果,如果楼主仅仅是想存储一些字符串,建议使用CStringArray或CStringList,不需要自己申请内存,mfc会替你搞定,总之用CString或std::string的话,不需要自己申请内存。容器的话,用vector、set、list都ok,也不需要自己申请内存。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没啥问题,一定是你的其它代码有问题。
追问
但是为啥我改成50,大小就行了呢。改成150就能访问到300个元素。
追答
估计是越界导致的,其他的变量或数组越界数据溢出导致你分配的内存空间被破坏或数据被破坏。new是在堆中操作,大概哪个地方破坏了堆空间吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询