json-tutorial
json-tutorial copied to clipboard
tutorial04中STRING_ERROR的作用是什么
在tutorial04中宏 STRING_ERROR什么作用呢? #define STRING_ERROR(ret) do { c->top = head; return ret; } while(0)
而且宏的参数中没有c
,如何进行调用呢?
宏在这里只是文本替换,参数没有,说明上下文中有 这个宏的用法我记得有讲,主要目的是让这个宏跟在一些条件语句后时,可以被视为一个整体,不会因为被拆分为多个语句而引发编译错误
加问一句,tutorial08中lept_copy函数
void lept_copy(lept_value* dst, const lept_value* src) {
assert(src != NULL && dst != NULL && src != dst);
switch (src->type) {
case LEPT_STRING:
lept_set_string(dst, src->u.s.s, src->u.s.len);
break;
case LEPT_ARRAY:
/* \todo */
{
lept_set_array(dst, src->u.a.capacity);
size_t i;
for (i = 0; i < src->u.a.size; i++) {
lept_copy(&dst->u.a.e[i], &src->u.a.e[i]);
}
dst->u.a.size = src->u.a.size;
}
break;
case LEPT_OBJECT:
/* \todo */
#if 1
{
lept_set_object(dst, src->u.o.capacity);
size_t i;
for ( i = 0; i < src->u.o.size; i++) {
dst->u.o.m[i].k = src->u.o.m[i].k;
dst->u.o.m[i].klen = src->u.o.m[i].klen;
lept_copy(&dst->u.o.m[i].v, &src->u.o.m[i].v);
}
dst->u.o.size = src->u.o.size;
}
#endif
break;
default:
lept_free(dst);
memcpy(dst, src, sizeof(lept_value));
break;
}
}
里面这段用#if包括的代码为什么会触发断点呢?
建议你用 这里 的方法把 把代码框起来 这样没办法看。。 @TaichiLi
@chanchancl 非常感谢帮助我这个刚用Github的小白,这是我实现的tutorial08代码,我已经贴上地址了https://github.com/TaichiLi/json-tutorial/blob/master/tutorial08/my-leptjson.c
Mycode 好的,已修改。这是我的代码。 我的程序出现的问题是内存泄漏,但我所有分配的内存都已经进行释放了。如果方便的话,可以介绍一下使用VS进行内存泄漏调试的具体方法,或者也可以提供一些相关资料。我目前只了解叶老师在专栏中介绍的方法,而且这种方法显示的内存泄漏信息,只是初次分配该内存的代码段,怎样再具体地确定内存泄漏的其他详细信息呢? 非常感谢你的回复和帮助!
非常感谢!我再仔细找找。
@chanchancl 终于调试成功了