我在一个库中有这段代码,我在想它是什么,因为我有内存问题,我想这就是原因。memset(foo-> a + foo-> b,0,10)是什么意思?
所以一段代码以下:
int new_size = foo->a_size + 10;
foo->a = realloc(foo->a, new_size*sizeof(struct items));
memset(foo->a+foo->a_size, 0, 10);
foo->a
是类型struct items*
和foo->a_size
是类型int
。
第一线的重新分配新的内存有10个街区,但现在我想知道如果memset()
套都foo->a
和foo->a_size
为0或应该从11-20到0 foo->a
这套块? 我试图依靠自己运行此代码块只接收Segmentation fault
编辑:
问题是,做的memset()
同时设置foo->a
和foo->a_size
为0或它与设定块偏移foo->a_size
到0
in foo->a
。后面的假设是正确的,但我还需要修正memset()
,所以最后一个参数是10 * sizeof(struct items)
。我还编辑了从foo->b
到foo->a_size
的变量名称。
不管结果,'foo-> A = realloc的(foo->一个,....'是一个相当坏习惯/编码风格。想象一下,realloc失败.......... –
'foo-> a'是指向分配内存的指针,'foo-> b'是它的偏移量。可以写得更清晰,更安全! –
他们真的叫'a'和'b',还是他们有意义的名字? – slim