69,371
社区成员
发帖
与我相关
我的任务
分享
void asn1_init(asn1_ctx_t * ctx, chunk_t blob, u_int level0, int implicit, u_int cond)
{
//printf("in fuc:%s, blob->len:%d\n", __func__, blob.len);
ctx->blobs[0] = blob;
ctx->level0 = level0;
ctx->implicit = implicit;
ctx->cond = cond;
memset(ctx->loopAddr, '\0', sizeof(ctx->loopAddr));
}
struct chunk {
unsigned char *ptr;
unsigned int len;
};
typedef struct chunk chunk_t;
#define ASN1_MAX_LEVEL 10
typedef struct {
int implicit;
u_int cond;
u_int level0;
u_int loopAddr[ASN1_MAX_LEVEL + 1];
chunk_t blobs[ASN1_MAX_LEVEL + 2];
} asn1_ctx_t;
struct chunk {
unsigned char *ptr;
unsigned int len;
};
typedef struct chunk chunk_t;
#define ASN1_MAX_LEVEL 10
typedef struct {
int implicit;
u_int cond;
u_int level0;
u_int loopAddr[ASN1_MAX_LEVEL + 1];
chunk_t blobs[ASN1_MAX_LEVEL + 2];
} asn1_ctx_t;
void asn1_init(asn1_ctx_t * ctx, chunk_t blob, u_int level0, int implicit, u_int cond)
{
//printf("in fuc:%s, blob->len:%d\n", __func__, blob.len);
ctx->blobs[0] = blob;
ctx->level0 = level0;
ctx->implicit = implicit;
ctx->cond = cond;
memset(ctx->loopAddr, '\0', sizeof(ctx->loopAddr));
}
结构体整体复制,对于C语言,原来是个问题,不可以整体复制;
后来就不算问题了,允许整体复制了。
(至少VC6的C,C++是可以的)
现在,不论C,C++
结构体整体复制,都没有问题。
PS:
结构体可以直接赋值,不过那个指针,如果是动态分配的就会出问题(
有两个地方持有那个指针,该在那里释放)
如果是局部自动变量的地址,
那么就必须,在这个局部变量,的生命周期结束前,使用,超过就会出错。
换句话说,这个结构体,含有一个指针,如何初始化,和应该深拷贝,还是浅拷贝,这个必须考虑好,处理
好,不然就会出问题。
如果,你的程序,是多线程,加了printf变好,就一点也不奇怪了。