免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2138 | 回复: 9
打印 上一主题 下一主题

高手请指教。~~C问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-30 20:21 |只看该作者 |倒序浏览
本帖最后由 虔诚的墨鱼 于 2010-05-01 22:03 编辑

C 开发   

Ubuntu 平台
  1. typedef struct aa{                                        //自定义结构
  2.       int*              bb;
  3.       unsigned char*    cc;
  4. }AA, *PAA;
  5. int zdpd(void* f)
  6. {
  7.      PAA ss = (PAA)f;
  8.      printf("%d, %s", *ss->bb, ss->cc);     //此时的这里却出现指向了一个空指针   导致程序异常错误  ss->cc的值错误   
  9.      return 1;
  10. }
  11. int main()
  12. {
  13.       int mbr = 0;
  14.       // 假设SOCKET句柄有效    我们可以正常的使用这个句柄   
  15.       AA tt;
  16.       unsigned char* str = (unsigned char*)malloc(65535);   
  17.       memset(str, 0, 65535);
  18.       //unsigned char str[]={'1','2','3','\0'};             //用它错误   
  19.       recv(mbr, str, 65535, 0);                          //假设接收是正常  可以获取到数据   
  20.       tt.bb   =  &mbr;
  21.       tt.cc   =  str;                                    //这传递有问题么
  22.       zdpd((void*)&tt);
  23.       return 1;
  24. }  
  25. 此段代码    我想问的问题是       tt.cc   =  str;     后   我们在函数  zdpd 中使用  ss->cc的值的时候发生错误   LINUX 的错误是段错误     windows应该就是指针指空了吧
  26. 此段代码改变成这样的时候没问题 :
  27. int main()
  28. {
  29.       int mbr = 0;
  30.       // 假设SOCKET句柄有效    我们可以正常的使用这个句柄   
  31.       AA tt;
  32.       unsigned char* str = (unsigned char*)malloc(65535);   
  33.       memset(str, 0, 65535);
  34.       str[0] = '1';
  35.       str[1] = '2';
  36.       str[2] = '2';
  37.       str[3] = '3';
  38.       tt.bb   =  &mbr;
  39.       tt.cc   =  str;                                    //这传递有问题么
  40.       zdpd((void*)&tt);
  41.       return 1;
  42. }  
复制代码
好像是unsigned char* 传递问题 windows平台可以通过 请高手解答

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
2 [报告]
发表于 2010-04-30 23:11 |只看该作者
struct aa* ss = (aa*)f;

这句C++合法,C不合法……

论坛徽章:
0
3 [报告]
发表于 2010-05-01 10:09 |只看该作者
memset(str, 0, 65535);
      str[0] = '1';
      str[0] = '2';
      str[0] = '3';
      str[0] = '4';
      str[0] = '5';
      str[0] = '6';
      str[0] = '7';
      str[0] = '8';
      str[0] = '9'

论坛徽章:
0
4 [报告]
发表于 2010-05-01 10:10 |只看该作者
覆盖同一个地方,最后剩下9

论坛徽章:
0
5 [报告]
发表于 2010-05-01 19:13 |只看该作者
对不起  是我失误    这是我帮朋友发的代码    他的号码好不能使用  需要等待24小时    现在是修改后的代码   错误依旧
  1. typedef struct aa{                                        //自定义结构
  2.       int*              bb;
  3.       unsigned char*    cc;
  4. }AA, *PAA;
  5. int zdpd(void* f)
  6. {
  7.      PAA ss = (PAA)f;
  8.      printf("%d, %s", *ss->bb, ss->cc);    // unsigned char str[]={'1','2','3','\0'}; 时候段错误
  9.                                            //还有  用recv(mbr, str, 65535, 0);也是段错误
  10.      return 1;
  11. }
  12. int main()
  13. {
  14.       int mbr = 0;
  15.       AA tt;
  16.       unsigned char* str = (unsigned char*)malloc(65535);   
  17.       memset(str, 0, 65535);
  18.       //unsigned char str[]={'1','2','3','\0'};             //用它错误   
  19.       //recv(mbr, str, 65535, 0);                         //用它也错误
  20.       str[0] = '1';                 //这句类型不出错   
  21.       str[1] = '2';
  22.       str[2] = '3';               
  23.       str[3] = '4';
  24.       str[4] = '5';
  25.       str[5] = '6';
  26.       str[6] = '7';
  27.       str[7] = '8';
  28.       str[8] = '9';
  29.       tt.bb   =  &mbr;
  30.       tt.cc   =  str;                        //这传递有问题么
  31.       zdpd((void*)&tt);
  32.       return 1;
  33. }  
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-05-01 21:23 |只看该作者
没什么错误啊

论坛徽章:
0
7 [报告]
发表于 2010-05-01 21:38 |只看该作者
你是用的LINUX 嘛

论坛徽章:
0
8 [报告]
发表于 2010-05-01 21:42 |只看该作者
没什么错误啊
虑而后能得 发表于 2010-05-01 21:23



    我要的是用  recv 接收数据的时候  把数据的指针传递过去    这时候才发生问题        假设我已经打开了一个socket    socket也可以接收数据了    这段代码是做模拟用的        怪咱没说清楚

论坛徽章:
0
9 [报告]
发表于 2010-05-01 21:44 |只看该作者
谁可以加我QQ帮我解决不    麻烦了  547171911

论坛徽章:
0
10 [报告]
发表于 2010-05-01 22:36 |只看该作者
问题出在str上,试试str[长度] = 。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP