堆结构中字符指针字段的malloc / calloc上的堆损坏

我有一个像这样定义的结构

typedef struct {
   char* Value;
   unsigned int Length;
} MY_STRUCT;

我使用calloc创建了这些结构的数组:

MY_STRUCT* arr = (MY_STRUCT*)calloc(50, sizeof(MY_STRUCT));

然后,在一个循环中,我访问每个结构并尝试使用calloc和memcpy分配值并将值赋给Value字段:

int i;
for(i = 0; i < 50; i++)
{
    MY_STRUCT myStruct = arr[i];
    int valueLength = get_value_length(i);//for sake of example, we can assume that this function returns any value [1-99]
    myStruct.Length = valueLength;
    myStruct.Value = (char*) calloc(valueLength, sizeof(char));
    memcpy(myStruct.Value, get_value(i), valueLength); //assume get_value(i) returns char* pointing to start of desired value
}

此代码块在Visual Studio中使用Visual Studio指示堆损坏时崩溃。 它不会在第一次通过循环时失败。 相反,它在第二遍时失败,当我试图分配长度为20个字符数组(第一遍是长度为5)。 我也尝试过使用malloc,并且我尝试过使用以下建议:

使用malloc,struct和char堆损坏*

我输入malloc的结果吗?

似乎没有什么能够缓解这个问题。 我原来是一位托管代码程序员,所以我对内存分配和管理的了解并不总是最好的。 我确信我正在做一些头脑发热的事情,但我不确定是什么。 任何帮助将不胜感激。 谢谢!

链接地址: http://www.djcxy.com/p/80413.html

上一篇: Heap corruption on malloc/calloc of char pointer field in struct

下一篇: Calloc does not initialize entire memory block to zero