json-tutorial icon indicating copy to clipboard operation
json-tutorial copied to clipboard

tutorial04中STRING_ERROR的作用是什么

Open TaichiLi opened this issue 6 years ago • 9 comments

在tutorial04中宏 STRING_ERROR什么作用呢? #define STRING_ERROR(ret) do { c->top = head; return ret; } while(0)而且宏的参数中没有c,如何进行调用呢?

TaichiLi avatar Feb 13 '19 09:02 TaichiLi

宏在这里只是文本替换,参数没有,说明上下文中有 这个宏的用法我记得有讲,主要目的是让这个宏跟在一些条件语句后时,可以被视为一个整体,不会因为被拆分为多个语句而引发编译错误

chanchancl avatar Feb 13 '19 18:02 chanchancl

加问一句,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 avatar Feb 14 '19 09:02 TaichiLi

建议你用 这里 的方法把 把代码框起来 这样没办法看。。 @TaichiLi

chanchancl avatar Feb 15 '19 07:02 chanchancl

@chanchancl 非常感谢帮助我这个刚用Github的小白,这是我实现的tutorial08代码,我已经贴上地址了https://github.com/TaichiLi/json-tutorial/blob/master/tutorial08/my-leptjson.c

TaichiLi avatar Feb 15 '19 13:02 TaichiLi

@TaichiLi 这个地址有点问题。 这个URL显示的是正确地址,但实际跳转的并不对。 你可以看如何在Markdown中插入连接

另外你说的触发断点,能说的再详细一点吗?

chanchancl avatar Feb 18 '19 02:02 chanchancl

Mycode 好的,已修改。这是我的代码。 我的程序出现的问题是内存泄漏,但我所有分配的内存都已经进行释放了。如果方便的话,可以介绍一下使用VS进行内存泄漏调试的具体方法,或者也可以提供一些相关资料。我目前只了解叶老师在专栏中介绍的方法,而且这种方法显示的内存泄漏信息,只是初次分配该内存的代码段,怎样再具体地确定内存泄漏的其他详细信息呢? 非常感谢你的回复和帮助!

TaichiLi avatar Feb 19 '19 03:02 TaichiLi

@TaichiLi 内存泄露我没调试过。。。可能什么地方的内存没释放吧。。 我简单搜索了一下, 方法1 你可以尝试一下这里的官方方法。 或者这里的 方法2

chanchancl avatar Feb 20 '19 06:02 chanchancl

非常感谢!我再仔细找找。

TaichiLi avatar Feb 20 '19 06:02 TaichiLi

@chanchancl 终于调试成功了

TaichiLi avatar Feb 20 '19 12:02 TaichiLi