2017-02-08 11 views
0
struct cacheline 
{ 
    int x[16]; 
}; 
struct cacheline *block = malloc(sizeof(struct cacheline) *size); //malloc for array of stucts 
    write_start = clock(); 
    for (k=0;k<=1000;k=k+1){ 
     for (i=1;i<=size;i=i+1){ 
      for(j=0;j<16;j=j+1){ 
        block[i].x[j] = j+1; ///some operation 
      } 
     } 
    } 
write_stop = clock(); 
Elapsed_write_time = (double)(write_stop - write_start)/1000 * 16; 
printf("Elapsed time: %f\n",Elapsed_write_time); 
free(block); //free the araray of structs 

Я пытаюсь освободить массив stucts и я получаю ошибку follwoing.Я пытаюсь свободный массив stuct но получить бесплатно(): недопустимый следующий размер (быстро): 0x0000000000afa010

+3

'i = 1; i <=size' -->' i = 0; i BLUEPIXY

ответ

1

Вы писали про конец массива. Последний элемент - block[999], но ваш код также записывается в block[1000].

+0

Я относительно новичок в malloc, так что я должен повторять цикл всего за 999? –

+0

Решила ошибку, спасибо !!!! –

+1

@ShreyasManjunath: все массивы C основаны на нулевом значении, как динамические, так и регулярные. Если у вас есть 'SomeType array_name [SOME_SIZE];', вы повторяете 'for (int i = 0; i

1

Массивы в C всегда начинаются с индекса 0 и заканчиваются на size-1. В цикле вы заходите за массив. Оно должно быть:

for (i=0;i < size;i=i+1){ 

И, наверное, то же самое для k, хотя я не могу найти, как он используется.

+0

Я думаю, что 'k' является просто повторным подсчетом, чтобы сделать код в течение полуразумного времени. Также заинтригован 'i = i + 1', а не' i ++ '- копирование из вопроса? –

+0

@JonathanLeffler: Я так считаю. Тем не менее он петли 1001 раз, что не согласуется с разделом в конце программы. –

+0

Я знал, что должен быть итерацией от 0 до 999, но сделал от 1 до 1000 ..... Btw Я работаю над системным verilog с i = i + 1, поэтому используется для ввода этого –