Redian新闻
>
地址空间里的一个BYTE不能写入(是合法地址)
avatar
地址空间里的一个BYTE不能写入(是合法地址)# Programming - 葵花宝典
n*i
1
最近碰到的这个问题太奇怪了,以前从没碰到过。C语言XP平台,好像就是地址空间里
,有一个BYTE没法写入,怎么写它的值都不变。只在我的一个APP里有这种情况,就是
在MAIN函数里定义了一个STRUCT,不管用MEMSET还是直接赋值,那个位置的值始终是
0x0a,直接去内存地址里看也是一样,请问有人碰到过这种情况吗?
avatar
t*t
2
肯定你的程序有问题

【在 n*********i 的大作中提到】
: 最近碰到的这个问题太奇怪了,以前从没碰到过。C语言XP平台,好像就是地址空间里
: ,有一个BYTE没法写入,怎么写它的值都不变。只在我的一个APP里有这种情况,就是
: 在MAIN函数里定义了一个STRUCT,不管用MEMSET还是直接赋值,那个位置的值始终是
: 0x0a,直接去内存地址里看也是一样,请问有人碰到过这种情况吗?

avatar
n*i
3
我估计可能是程序有问题,不过一点思路都没有,没碰到过这种奇怪的情况。我用
DEBUG进去看汇编指令,比如mov [edi],eax这句话以后,那个地址的值还没变,真是邪
门了。

【在 t****t 的大作中提到】
: 肯定你的程序有问题
avatar
E*V
4
贴程序吧

【在 n*********i 的大作中提到】
: 我估计可能是程序有问题,不过一点思路都没有,没碰到过这种奇怪的情况。我用
: DEBUG进去看汇编指令,比如mov [edi],eax这句话以后,那个地址的值还没变,真是邪
: 门了。

avatar
n*i
5
大致贴一下哈
int main(int argc, char* argv[])
{
HINSTANCE m_DLL;
FP_Open m_Open;
...... // 声明一些函数指针
unsigned int colorspace = 0;
int MemoryLeakTest = 0;
int CrashTest = 0;
bool bDecodeOnly = FALSE;
unsigned char* szRecBuffer = NULL;

Setting mysetting; // 我说的有问题的struct
memset(&mysetting, 0, sizeof(Setting));
//这里就不行了,比如mysetting.a的memset完以后还是0x0a。如果我写mysetting
.a = 2,值还是不变。
.... // 下面是LOAD一个DLL,LOAD FUN
avatar
n*i
6
补充:用的VS2005,没打SP1
avatar
c*t
7
post Setting's declaration.

【在 n*********i 的大作中提到】
: 大致贴一下哈
: int main(int argc, char* argv[])
: {
: HINSTANCE m_DLL;
: FP_Open m_Open;
: ...... // 声明一些函数指针
: unsigned int colorspace = 0;
: int MemoryLeakTest = 0;
: int CrashTest = 0;
: bool bDecodeOnly = FALSE;

avatar
n*i
8
这个不能POST。。。不过可以说一下,
大小是3120BYTE,里面都是INT,FLOAT,INT*等32位的变量,还有一些RESERVE的CHAR
型,不过都是4BYTE ALIGN的。刚才说错了,不能改的那个地方所对应的变量是INT型的
。不能赋值的在STRUCT里1K多左右BYTE的地方。

【在 c*****t 的大作中提到】
: post Setting's declaration.
avatar
n*i
9
再补充一下,如果我用MALLOC的方式分配内存给那个STRUCT,把那个点的内存绕过去不
用,程序就完全没有问题。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。