2014-09-03 49 views
3

我對C編程有點生疏。我試圖動態分配一個結構數組,我得到「錯誤在`./a.out':free():無效的下一個大小(快)」。我仔細看了看,看到與此錯誤條件相關的其他帖子在stackoverflow上。似乎很明顯,我在某處砸碎了記憶,但我看不出我做錯了什麼。C - 釋放動態分配的struct數組get'無效的下一個大小(快)'錯誤

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 
#include <stdbool.h> 
#include <unistd.h> 
#include <ctype.h> 
#include <math.h> 
#include <getopt.h> 

#define sampleSize 1 

typedef struct 
{ 
    double basicTime; 
    double spacialTime; 
    double temporalTime; 
    double spacialTemporalTime; 
} TimeEntry; 

int main(int argc, char **argv) 
{ 
    TimeEntry* timeThings; 
    int i; 
    time_t startTime; 
    time_t stopTime; 

    //Allocate an array for storing all of the timeThings 
    timeThings = (TimeEntry*)malloc(sampleSize * sizeof(TimeEntry)); 

    for (i = 0; i < sampleSize; i++); 
    { 

     time(&startTime); 
     sleep(1); 
     time(&stopTime); 
     timeThings[i].basicTime = difftime(stopTime, startTime); 

     time(&startTime); 
     sleep(1); 
     time(&stopTime); 
     timeThings[i].spacialTime = difftime(stopTime, startTime); 

     time(&startTime); 
     sleep(1); 
     time(&stopTime); 
     timeThings[i].spacialTemporalTime = difftime(stopTime, startTime); 

     time(&startTime); 
     sleep(1); 
     time(&stopTime); 
     timeThings[i].temporalTime = difftime(stopTime, startTime); 
    } 

    free(timeThings); 

    return 0; 
} 

當運行該程序時,得到下列錯誤:

*** Error in `./a.out': free(): invalid next size (fast): 0x0000000001a93010 *** 
======= Backtrace: ========= 
/lib/x86_64-linux-gnu/libc.so.6(+0x7aa16)[0x7fc7ef743a16] 
/lib/x86_64-linux-gnu/libc.so.6(+0x7b793)[0x7fc7ef744793] 
./a.out[0x4007b1] 
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fc7ef6ea995] 
./a.out[0x400559] 
======= Memory map: ======== 
00400000-00401000 r-xp 00000000 08:06 24248357       /home/dnhandy/Projects/a.out 
00600000-00601000 rw-p 00000000 08:06 24248357       /home/dnhandy/Projects/a.out 
01a93000-01ab4000 rw-p 00000000 00:00 0         [heap] 
7fc7ef4b3000-7fc7ef4c8000 r-xp 00000000 08:05 1843221     /lib/x86_64-linux-gnu/libgcc_s.so.1 
7fc7ef4c8000-7fc7ef6c8000 ---p 00015000 08:05 1843221     /lib/x86_64-linux-gnu/libgcc_s.so.1 
7fc7ef6c8000-7fc7ef6c9000 rw-p 00015000 08:05 1843221     /lib/x86_64-linux-gnu/libgcc_s.so.1 
7fc7ef6c9000-7fc7ef86c000 r-xp 00000000 08:05 1846555     /lib/x86_64-linux-gnu/libc-2.17.so 
7fc7ef86c000-7fc7efa6b000 ---p 001a3000 08:05 1846555     /lib/x86_64-linux-gnu/libc-2.17.so 
7fc7efa6b000-7fc7efa6f000 r--p 001a2000 08:05 1846555     /lib/x86_64-linux-gnu/libc-2.17.so 
7fc7efa6f000-7fc7efa71000 rw-p 001a6000 08:05 1846555     /lib/x86_64-linux-gnu/libc-2.17.so 
7fc7efa71000-7fc7efa75000 rw-p 00000000 00:00 0 
7fc7efa75000-7fc7efa96000 r-xp 00000000 08:05 1846537     /lib/x86_64-linux-gnu/ld-2.17.so 
7fc7efc68000-7fc7efc6b000 rw-p 00000000 00:00 0 
7fc7efc93000-7fc7efc96000 rw-p 00000000 00:00 0 
7fc7efc96000-7fc7efc97000 r--p 00021000 08:05 1846537     /lib/x86_64-linux-gnu/ld-2.17.so 
7fc7efc97000-7fc7efc99000 rw-p 00022000 08:05 1846537     /lib/x86_64-linux-gnu/ld-2.17.so 
7ffffbf1f000-7ffffbf40000 rw-p 00000000 00:00 0       [stack] 
7ffffbffe000-7ffffc000000 r-xp 00000000 00:00 0       [vdso] 
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0     [vsyscall] 
Aborted 
+13

'for(i = 0; i BLUEPIXY 2014-09-03 19:03:56

+2

[並啓用您的編譯器警告](http://coliru.stacked-crooked.com/a/bd9a700b2375633e)。 – WhozCraig 2014-09-03 19:11:33

+0

你在linux上。只要你看到像 這樣的內存錯誤,最好的反射就是使用valgrind。 它會指向無效的內存訪問(過去分配的內存,訪問釋放的內存)或雙免費的例如。 在這種情況下,調試器可能需要查看'i'的值,正如其他人指出的那樣。 – manuBriot 2014-09-03 19:53:51

回答

0

爲(I = 0;我<的採樣大小;我++); 這個循環使i = 1,你將進入未分配的空間。去掉 ';'這裏

相關問題