Redian新闻
>
急问:这个为什么不行?
avatar
急问:这个为什么不行?# Programming - 葵花宝典
z*e
1
void *t=malloc(100);
unsigned int* p=(unsigned int*)((unsigned int)t+9);
//int k=300;
//memcpy(p,&k,4);
*p=1;
直接对 *p赋值就出错,用memcpy就可以,why??
linux下run的。
avatar
m*t
2
direction of heap is architecture dependent?

【在 z***e 的大作中提到】
: void *t=malloc(100);
: unsigned int* p=(unsigned int*)((unsigned int)t+9);
: //int k=300;
: //memcpy(p,&k,4);
: *p=1;
: 直接对 *p赋值就出错,用memcpy就可以,why??
: linux下run的。

avatar
z*e
3
不知道,
*(p+4), *(p+8)...这样按integer size来赋值就可以。
但是对*(p+1),*(p+2),*(p+3),*(p+5)这些赋值就不行。
大概能猜猜,但是说不清楚,谁能解释一下,谢谢。
Windows上还没try,不晓得结果如何。

【在 m***t 的大作中提到】
: direction of heap is architecture dependent?
avatar
k*f
4
sunos指针需要对齐的。不能随便移动

【在 z***e 的大作中提到】
: void *t=malloc(100);
: unsigned int* p=(unsigned int*)((unsigned int)t+9);
: //int k=300;
: //memcpy(p,&k,4);
: *p=1;
: 直接对 *p赋值就出错,用memcpy就可以,why??
: linux下run的。

avatar
P*t
5
Haven't met this before but I guess it's because not aligned properly.
For an integer assignment it probably expects pointer aligned on 4 byte.
e.g., you may try change +9 to +8 and it should work.

【在 z***e 的大作中提到】
: void *t=malloc(100);
: unsigned int* p=(unsigned int*)((unsigned int)t+9);
: //int k=300;
: //memcpy(p,&k,4);
: *p=1;
: 直接对 *p赋值就出错,用memcpy就可以,why??
: linux下run的。

avatar
z*e
6
噢,对,的确是SunOS。
谢谢。

【在 k****f 的大作中提到】
: sunos指针需要对齐的。不能随便移动
avatar
t*g
7
看什么arch吧,x86底下run没有问题,sparc下面会bus error。

【在 z***e 的大作中提到】
: void *t=malloc(100);
: unsigned int* p=(unsigned int*)((unsigned int)t+9);
: //int k=300;
: //memcpy(p,&k,4);
: *p=1;
: 直接对 *p赋值就出错,用memcpy就可以,why??
: linux下run的。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。