- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 怪问题的解决
在参与openSSL项目的时候,发现一个怪异的情况:用标准malloc,free有错,要使用OPENSSL_malloc, OPENSSL_free正常,可能openSSL提供了自己的堆管理,浪费了我一个半小时。 使用OPENSSL_malloc分配的空间不够,sprintf溢出此空间,但VC报告一个NULL访问异常(调试状态下运行又没有错误),不知是怎么来的。还是意外发现了这
2008-08-22 10:26:00 602
原创 java线程
notify()、notifyAll()、wait()必须在锁住该对象的同步语句内调用。摘录Jdoc的说明:This method should only be called by a thread that is the owner of this objects monitor. A thread becomes the owner of the objects mon
2008-08-22 10:24:00 720
原创 字节对齐的简单方法
// 此语句用于把地址对齐到cell的整数倍,仅在cell为偶数时正确。(((long)space) + (sizeof(cell) - 1)) & ~(sizeof(cell) - 1) 原理描述:假如一个数为18,cell为四字节,则cell整倍数的下一地址与现有地址相差不超过sizeof(cell)-1,这里的下一地址为20。把一个数加上sizeof(cell)-1,
2008-08-22 10:18:00 816
原创 const定义的常量
const定义的常量会被编译器看作是固定值的变量,它与宏不同。因此,假如有头文件"head.h" #ifndef HEAD#define HEADconst int EOF = -1;#endif----------------------------------有两个C文件C1,C2如下:C1#include "head.h" C2
2008-08-22 10:15:00 867
原创 C语言的try and catch机制
C语言具有的类似try and catch机制,unix下机制也相同。VC例子:#include #include jmp_buf mark; // 保存stack环境的变量 void main(void){int jmpret;int result;jmpret = setjmp( mark ); @1@ // 保存当前stack环境到mar
2008-08-22 10:15:00 2590
原创 C99对于普通C的改变
一、总述c99:粗略描述,并非完整的归纳。 增加部分1.类型,属于关键字布尔 _Bool 头文件 包含更简明的宏bool,当不与原有代码冲突时,建议包含此头文件。复数 _Complex 头文件 包含更简明的宏comlex,当不与原有代码冲突时,建议包含此头文件。虚数 _Imaginary 头文件 包含更简明的宏
2008-08-22 10:13:00 914
原创 传数组参数
多维数组当函数参数,最后几个长度要指定,如:printArray(int [][2][3],length); 一个技巧是把多维数组当一维数组传。如:int a[][2]={1,2,3,4}传给printArray (int [],int) 对数组的取址是多余的,如 a 和 &a 的值相同。数组本身是一个地址的常量值,不是变量int a[],则a是常量。
2008-08-22 10:11:00 1043
原创 C支持参数可变的函数
例: 当调用函数add_values(10,20,30,0)时,调用的堆栈为:-------------10-------------20-------------30-------------0-------------函数返回地址------------- 可以通过宏va_list、va_start、 va_arg、 va_end 来从
2008-08-22 10:10:00 632
原创 C比较浮点数
实际上,精确比较浮点数还是可以的。如:void main(void){float a=0.065F;if(a==0.065F)printf("%f",a);}可以输出a的值,只是不太方便罢了,并非如书上所说,由于浮点数不能精确表示0.065F,所以比较一直为假,因为比较表达式中的0.065F也要存入内存中。假如改为a==0.065则为假,因为0.065默
2008-08-22 10:08:00 803
原创 指针采用值传递
在C中,指针采用值传递,就是在传参数时,拷贝形参指针的值给实参指针。 例子:void swap (int *,int *); void main(void){int a=100,b=0;int *pa=&a,*pb=&b;printf("pa = %d,pb = %d/n",pa,pb);swap(pa,pb);printf("pa = %d,pb
2008-08-22 10:07:00 795
原创 C的结构
在内存中,结构不一定是它表面看起来那么大。typedef struct{char abc[2];int i;} ABC;printf("%d/n",sizeof(ABC));//结果为 8注:具体的大小依赖于编译器的字节对齐情况。有些编译器甚至会调整结构中的成员的排列顺序。 即使空结构,也不会为0字节,可能是避免为零时,空结构的地址就等于紧接它的数据
2008-08-22 10:05:00 658
原创 sizeof
sizeof是返回类型的字节数,当类型是指针时,32位机返回4字节,不返回指针指向的数据大小。 如: char* string = "abc"; sizefo(string)=4; strlen(string)=3;但 char string[32]="abc";则:sizeof(string)=32;sizeof((char*) string
2008-08-22 10:02:00 604
原创 指针
记住:在C中,指针和其它基本类型一样,是分类型的,根据类型不同,操作会迥异。如 int *ip; float *fp;ip++; fp++;每次增加的地址数不同。 也有无类型的指针 void * ptr,这时就不能对ptr进行加量或减量。如:ptr++指向函数的指针int (*min)();函数的指针可以忽略函数的参数,也可以
2008-08-22 09:55:00 583
原创 C# 引用DLL报异常
方法1.假如你使用的是MFC DLL, 必须用支持CLR参数编译,才能被C#调用2.假如目标平台不同,调用DLL会弹出 BadImageException,必须统一成相同平台,例如 x32 X86 ARM等,可以在solution device manager设置
2008-07-17 10:03:00 787
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人