我对C编程有点生疏。我正在尝试动态分配一个结构数组,我得到“./a.out'中的错误:free():无效的下一个大小(快)”。我仔细研究了一下,并查看了与此错误情况相关的stackoverflow上的其他帖子。很明显,我在某处砸碎记忆,但我看不出我做错了什么。
#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
答案 0 :(得分:0)
for(i = 0; i&lt; sampleSize; i ++); 这个循环使i = 1,你进入未分配的空间。去掉 ';'这里