忍受我。我在8年內沒有用c語言編碼,而且完全困惑爲什麼我的字符串操作不起作用。我正在編寫一個永久循環的程序。在循環中,我初始化了兩個char指針,每個指針都被傳遞給一個將文本添加到char指針(數組)的函數。當函數完成後,我打印字符指針並釋放兩個字符指針。但是程序後,7次迭代死與以下錯誤消息realloc和自由原因「雙免費或腐敗」
* glibc的檢測* ./test:雙重釋放或腐敗(fasttop):0x0804a168 ***
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include string.h
#include stdio.h
#include stdlib.h
#include errno.h
#include time.h
char *SEPERATOR = "|";
void getEvent (char* results);
void getTimeStamp(char* timeStamp, int timeStampSize);
void stringAppend(char* str1, char* str2);
int main (int argc, char *argv[])
{
int i = 0;
while(1)
{
i++;
printf("%i", i);
char* events= realloc(NULL, 1);
events[0] = '\0';
getEvent(events);
char* timestamp= realloc(NULL, 20);
timestamp[0] = '\0';
getTimeStamp(timestamp, 20);
printf("%s", events);
printf("timestamp: %s\n", timestamp);
free(events);
free(timestamp);
}
}
void getEvent (char* results)
{
stringAppend(results, "a111111111111");
stringAppend(results, "b2222222222222");
}
void getTimeStamp(char* timeStamp, int timeStampSize)
{
struct tm *ptr;
time_t lt;
lt = time(NULL);
ptr = localtime(<);
int r = strftime(timeStamp, timeStampSize, "%Y-%m-%d %H:%M:%S", ptr);
}
void stringAppend(char* str1, char* str2)
{
int arrayLength = strlen(str1) + strlen(str2) + strlen(SEPERATOR) + 1;
printf("--%i--",arrayLength);
str1 = realloc(str1, arrayLength);
if (str1 != NULL)
{
strcat(str1, SEPERATOR);
strcat(str1, str2);
}
else
{
printf("UNABLE TO ALLOCATE MEMORY\n");
}
}
請重新格式化:) – KevinDTimm 2010-07-07 03:26:47
@Kevin,如你所願。 – 2010-07-07 03:30:11
你爲什麼每次分配循環而不是簡單地分配和重用內存? – 2010-07-07 03:31:42