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
'for(i = 0; i
BLUEPIXY
2014-09-03 19:03:56
[並啓用您的編譯器警告](http://coliru.stacked-crooked.com/a/bd9a700b2375633e)。 – WhozCraig 2014-09-03 19:11:33
你在linux上。只要你看到像 這樣的內存錯誤,最好的反射就是使用valgrind。 它會指向無效的內存訪問(過去分配的內存,訪問釋放的內存)或雙免費的例如。 在這種情況下,調試器可能需要查看'i'的值,正如其他人指出的那樣。 – manuBriot 2014-09-03 19:53:51