- 论坛徽章:
- 0
|
写了个memset函数,但第一个版本居然告诉我段错误(segementation fault,GCC编译)!百思不得其解。代码如下:
- #include<stdio.h>
- typedef struct student{
- int x;
- int y;
- }Node;
- int memset2(void* to,int num,int len)
- {
- int res=0;
- int* tmp=(int*)to;
- printf("tmp=%x\n",tmp);
- while(len--){*tmp=num;tmp++;}res=1;
- printf("after memset,tmp=%x\n",tmp);
- return res;
- }
- main()
- {
- int res=0;
- Node st11;
- Node* st1=&st11;
- res=memset2(st1,23,sizeof(Node));
- }
复制代码
于是去看Linux的源代码,发现就一处和我不一样,就是memset里的所有临时和传入变量的参数都是char类型的,遂改之,如下:
- int memset2(void* to,char num,int len)
- {
- int res=0;
- char *tmp=(char*)to;
- printf("tmp=%x\n",tmp);
- while(len--){*tmp=num;tmp++;}res=1;
- printf("after memset,tmp=%x\n",tmp);
- return res;
- }
复制代码
结果编译运行全部正常。。那么。。这是怎么回事呢?我首先觉得可能是printf里面访问了未初始化的指针,这些未初始化指针指向了内存的保护段,比如printf("%s",1)当然会出错啦(虽然我很肯定我未使用这些未初始化指针。)好吧。。不管了。。先把所有printf注释掉。。。结果我崩溃,int类型时还是出现同样错误。
结果还是百思不得其解。。。。忘高手指点一下。 |
|