Я использую VS2017 и имею следующие строки кода C (извините, я не могу опубликовать все содержимое функции):
char *dptr; /* Global variables */
static u_int16_t vers;
...
static int32_t
read_row(database_t *dbase, table_t *table, int32_t col_flag, int32_t flag) {
row_t *rowptr;
char marker;
void *new_row;
table_t *t_new;
size_t row_length;
size_t row_ = 1;
marker = *dptr++;
if (vers < VERS && marker != ROW) {
return -1;
}
/* Create a new row */
t_new = table;
row_length = t_new->row_length;
new_row = calloc(row_, row_length);
rowptr = new_row;
if (rowptr == NULL)
return -1;
...
Последняя строка вызывает «Исключение, выданное в 0x00000000778745A0 (ntdll.dll)) в ****. exe: 0xC0000005: ошибка чтения прав доступа 0x00000000787745A0 "ошибка.
Во время отладки, когда я наведите указатель мыши на calloc, я вижу, что его значение равно" 0x000000013f63dc94 ".Но почему-то выдается исключение, и это значение никогда не присваивается new_row (его значение остается «0xcccccccccccccccc»).
Я заметил, что это исключение выдается, когда calloc имеет значение> "0x00000001 ********".Кажется, работает нормально, если 8 MSB адреса равны 0. Определение calloc () взято из corecrt.malloc.h:
_Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size)
_ACRTIMP _CRT_JIT_INTRINSIC _CRTALLOCATOR _CRTRESTRICT
void* __cdecl calloc(
_In_ _CRT_GUARDOVERFLOW size_t _Count,
_In_ _CRT_GUARDOVERFLOW size_t _Size
);
Любые идеи о том, что может быть причиной этого исключения и как исправитьэто будет оценено.Кстати, я использую Win 7 Pro с 8 ГБ оперативной памяти.