Cygwin malloc覆盖堆中的另一个内存

Cygwin malloc覆盖堆中的另一个内存,c,cygwin,malloc,C,Cygwin,Malloc,我在尝试删除一些内存时出现了一个奇怪的错误。我有一个指向“malloced”结构的指针,我想要另一个结构。所以我再次调用malloc,malloc返回的指针是一个空的空间-到目前为止还可以。然后我将分配的区域设置为memset,memset将覆盖另一个仍在使用的变量。 内存中的第一个结构在0x1643c98中,而指向第二个结构的给定指针是0x1643bf8,但我想要malloc 200字节。守则: data_t *data = get_head_data(); int length = dat

我在尝试删除一些内存时出现了一个奇怪的错误。我有一个指向“malloced”结构的指针,我想要另一个结构。所以我再次调用malloc,malloc返回的指针是一个空的空间-到目前为止还可以。然后我将分配的区域设置为memset,memset将覆盖另一个仍在使用的变量。 内存中的第一个结构在0x1643c98中,而指向第二个结构的给定指针是0x1643bf8,但我想要malloc 200字节。守则:

data_t *data = get_head_data(); 
int length = data->head.length;
data_t *new_data = malloc(length); 
memset(new_data, 0x00, length); // this line override the perivously malloced data 
//some other operation
我使用windowsxp(32位)和cygwin以及gcc3.4.4。处理器是intel core 2 duo。 你知道什么地方出了问题或者应该出什么问题吗? 提前谢谢

编辑:对不起,我是一个完全错误的轨道。有一个错误函数是无调用的。当我稍后调用malloc时,前面的地址在内存中,我认为它是有效的,但它是free()-ed。
谢谢你的建议

如果需要将新分配的内存设置为0,请使用
calloc
。您可能混淆了指针、大小和变量-请再次检查代码。

data\u t*new\u data=malloc(长度)

除非
sizeof(data\u t)
为1,否则该行很可能是错误的。您正在分配
长度
字节。如果需要长度为
的数组,则需要分配长度为
字节的
sizeof(data\t)*数组


正如@littleadv所建议的,更好的解决方案是使用
calloc
。该函数对\u项的数量和大小采用单独的参数,因此很难出错。

请编辑代码或发布更多代码:我们不知道该memset调用中的
result
是什么。memset中的result参数和新的\u数据指针应该是同一个指针吗?
memset(new\u data,0x00,length)无法覆盖分配给
新\u数据的内存块之外的任何内容。您可能在另一个数组的边距之外写入。但我需要看到更多的代码来确定…这仍然不是您的确切代码;在
int length
行的末尾有一个无关的
数据。请创建一个复制您的问题的最小测试用例,并将其完整发布,以便我们可以看到您实际在做什么。
length
data->head.length
)和
sizeof(data\u t)
之间的关系是什么?