Chinaunix

标题: 有空的朋友来帮我看一下 [打印本页]

作者: C_C    时间: 2007-06-05 09:42
标题: 有空的朋友来帮我看一下

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. struct test
  5. {
  6.         char s1[3+1];
  7.         char s2[3+1];
  8. };
  9. int main(void)
  10. {
  11.        
  12.         test ts1,ts2,*ts3;
  13.         char szStr[100];
  14.         memset( &ts1,0x00,sizeof(ts1));
  15.         memset( &ts2,0x00,sizeof(ts2));
  16.         memset( &szStr,0x00,sizeof(szStr));
  17.         strcpy( ts1.s1,"123");
  18.         strcpy( ts1.s2,"456");
  19.         memcpy( szStr,&ts1,sizeof(ts1) );
  20.         ts3 = &ts2;
  21.         ts3 = ( test*)szStr;
  22.         printf("%s\n",ts3->s1);
  23.         printf("%s\n",ts3->s2);
  24.         return 0;
  25. }
复制代码

上段代码存在内存溢出的危险吗?
作者: 福瑞哈哥    时间: 2007-06-05 09:45
請自行使用valgrind分析
作者: C_C    时间: 2007-06-05 09:51
原帖由 福瑞哈哥 于 2007-6-5 09:45 发表
請自行使用valgrind分析

不还意思,公司没装有这个工具
作者: C_C    时间: 2007-06-05 09:52
win底下有没有检测内存的工具
作者: 柳五随风    时间: 2007-06-05 10:04
没看出来没有问题
作者: C_C    时间: 2007-06-05 10:09

  1. memcpy( szStr,&ts1,sizeof(ts1) );
复制代码

我比较担心的是这一句,会不会因为位对齐而导致部分数据丢失
作者: 柳五随风    时间: 2007-06-05 10:18
原帖由 C_C 于 2007-6-5 10:09 发表

  1. memcpy( szStr,&ts1,sizeof(ts1) );
复制代码

我比较担心的是这一句,会不会因为位对齐而导致部分数据丢失



szStr,没有问题. ts1也没有问题,你担心那部分数据丢失?
作者: choki    时间: 2007-06-05 11:13
原帖由 柳五随风 于 2007-6-5 10:18 发表



szStr,没有问题. ts1也没有问题,你担心那部分数据丢失?




楼主说的是
struct xxx
{
    char x[x];
    int    i;
    float f;
};
可能造成的数据补位?

同表关注
作者: Sorehead    时间: 2007-06-05 11:37
不会,也不存在位对齐的问题。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2