内存相关 一个奇怪的有关问题
内存相关 一个奇怪的问题
//memset(&a,sizeof(a),0);
a.n=1;
a.c=12;
char* c=(char*)&a;
int n=0;
for(int i=0;i<sizeof(a);i++)
{
n+=*c;
}
cout<<n<<endl;
cin>>n;
main();
return 0;
}
[/code]
我的预期是,每次输出的n都是一样的。但结果却不是。
很奇怪,求解决。
------解决方案--------------------
内存对齐,结构a有3个填充字节,由于这3个字节未赋值,因此结果随机
另外最好不要调用main,标准里面是不允许这样调用的,不过目前的主流编译器似乎都支持这样调用
------解决方案--------------------
a的内存你每次都是随机分配的结果当然不同了
------解决方案--------------------
------解决方案--------------------
- C/C++ code
class A { int n; char c; }; int main() { [code=C/C++]
//memset(&a,sizeof(a),0);
a.n=1;
a.c=12;
char* c=(char*)&a;
int n=0;
for(int i=0;i<sizeof(a);i++)
{
n+=*c;
}
cout<<n<<endl;
cin>>n;
main();
return 0;
}
[/code]
我的预期是,每次输出的n都是一样的。但结果却不是。
很奇怪,求解决。
------解决方案--------------------
内存对齐,结构a有3个填充字节,由于这3个字节未赋值,因此结果随机
另外最好不要调用main,标准里面是不允许这样调用的,不过目前的主流编译器似乎都支持这样调用
------解决方案--------------------
a的内存你每次都是随机分配的结果当然不同了
------解决方案--------------------
------解决方案--------------------