基础不好啊,c++指针的问题,求教!

马少华 2011-07-16 04:57:20
struct SimpleStruct
{
int nID;
char *pszBuffer;
SimpleStruct(int nSize)
{
nID = 0;
pszBuffer = new char[nSize];
}
}

char szMsg[200] = _T("024abc");
SimpleStruct pData = new SimpleStruct(30);
memcpy_s(pData->pszBuffer,30,szMsg,30);
这个值pData->pszBuffer为什么还是0

我的实际环境,szMsg全局变量,这些代码都是在线程里执行的。
...全文
242 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
马少华 2011-07-30
  • 打赏
  • 举报
回复
不好意思,是我粗心了,szMsg的前几位是个0
所以在vs调试下面pData->pszBuffer里面"看到"的内容就是0我以为没有拷贝成功,最后逐个字节的测试,发现有数据。
结了
mzy1984 2011-07-20
  • 打赏
  • 举报
回复
2楼和19楼正解啊,LZ没看到么。
shiyunqiang 2011-07-20
  • 打赏
  • 举报
回复
实在看不出来问题,学习一下!
zhqgod 2011-07-20
  • 打赏
  • 举报
回复
个人同意 bill 的说法

一步一步试吧 越改越乱 呵呵
LILI00000 2011-07-19
  • 打赏
  • 举报
回复

struct SimpleStruct
{
int nID;
char *pszBuffer;
SimpleStruct(int nSize)
{
nID = 0;
pszBuffer = new char[nSize];
}
};
char szMsg[200] = _T("024abc");
SimpleStruct *pData = new SimpleStruct(30);
memcpy(pData->pszBuffer,szMsg,30);

VC6测试正常!
shenyi0106 2011-07-19
  • 打赏
  • 举报
回复
测试结果是:代码没问题
lcyw 2011-07-19
  • 打赏
  • 举报
回复
线没有程?或者同步出问题了把,,
Zimmerk 2011-07-19
  • 打赏
  • 举报
回复
会不会是外部修改了指针指向?
Zimmerk 2011-07-19
  • 打赏
  • 举报
回复

memcpy(pData->pszBuffer, "Hello World", 30);
试试看看有没有数据,不行就调试看看吧
马少华 2011-07-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhqgod 的回复:]
struct SimpleStruct
{
int nID;
char *pszBuffer;
SimpleStruct(int nSize)
{
nID = 0;
pszBuffer = new char[nSize];
}
}

个人认为 pszBuffer 内存分配没有成功(由于内存不足导致的)。

通常我是采用模板来控制这种资源分配方……
[/Quote]

后来我改成
SimpleData *pData = new SimpleData;
pData->pszBuffer = new char[nSize];//单步调试发面内存分配成功了
memset(pData->pszBuffer,0,nSize);
memcpy_s(pData->pszBuffer,30,szMsg,30);
pszBuffer依然没有复制成功
  • 打赏
  • 举报
回复
内存分配成功否?
tanyang949 2011-07-18
  • 打赏
  • 举报
回复
学习中,看看。。。。。。。。。。。。。。。。。。。。。
higher_zjm 2011-07-18
  • 打赏
  • 举报
回复
44444444444444
zhqgod 2011-07-17
  • 打赏
  • 举报
回复
struct SimpleStruct
{
int nID;
char *pszBuffer;
SimpleStruct(int nSize)
{
nID = 0;
pszBuffer = new char[nSize];
}
}

个人认为 pszBuffer 内存分配没有成功(由于内存不足导致的)。

通常我是采用模板来控制这种资源分配方式。当然也可以用auto_ptr
c372662316 2011-07-17
  • 打赏
  • 举报
回复
弱弱问一句pData->pszBuffer显示的不是第一个字符?
马少华 2011-07-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhqgod 的回复:]
异常处理的问题
结构设计方法的弊端
[/Quote]
能否指点一、二
马少华 2011-07-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
memcpy_s(pData->pszBuffer,30,szMsg,30);
你执行这步的时候,你的szMsg里有数据吗?
[/Quote]
szMsg里是有数据的

[Quote=引用 2 楼 muyunfengyd 的回复:]
SimpleStruct pData = new SimpleStruct(30);
修改为
SimpleStruct * pData = new SimpleStruct(30);
[/Quote]
不好意思,这个*号是我写掉了,我代码里面有

[Quote=引用 3 楼 schlafenhamster 的回复:]
char szMsg[200] = _T("024abc");
SimpleStruct *pData = new SimpleStruct(30);
memcpy(pData->pszBuffer,szMsg,30);
用memcpy是对的,你的memcpy_s(pData->pszBuffer,30,szMsg,30);
是什么?
[/Quote]
memcyp_s是memcpy的安全版本
马少华 2011-07-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 evionmzs 的回复:]
struct SimpleStruct
{
int nID;
char *pszBuffer;
SimpleStruct(int nSize)
{
nID = 0;
pszBuffer = new char[nSize];
}
}

char szMsg[200] = _T("024abc");
SimpleStruct pData = new ……
[/Quote]
szMsg里面有数据
zhqgod 2011-07-16
  • 打赏
  • 举报
回复
异常处理的问题
结构设计方法的弊端
schlafenhamster 2011-07-16
  • 打赏
  • 举报
回复
char szMsg[200] = _T("024abc");
SimpleStruct *pData = new SimpleStruct(30);
memcpy(pData->pszBuffer,szMsg,30);
用memcpy是对的,你的memcpy_s(pData->pszBuffer,30,szMsg,30);
是什么?
加载更多回复(3)

16,550

社区成员

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

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

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