我得到了以下代碼的段錯誤,有人可以幫我理解爲什麼嗎?像這樣使用malloc有什麼問題?
typedef struct ClientData {
int _clientId;
char _msg[200];
} ClientData_t;
// in a function
char *id = malloc(50);
char *msg = malloc(sizeof(MESSAGE_LENGTH));
memset(id, 0, 50);
memset(msg, 0, MESSAGE_LENGTH);
strcpy(id, &(buffer[1]));
strcpy(msg, &(buffer[50]));
free(id);
printf("this message can be printed\n");
ClientData_t *newData = malloc(sizeof(ClientData_t));
// I got segmentation fault for this malloc here
第二次,我刪除了從上面free(id);
通話,並保持休息,我得到了下面的錯誤,一旦最後的malloc稱爲:
mainClient1: malloc.c:3074: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Abort
終於,一切工作,我改變之後前兩行中的功能爲:
char id[50];
char msg[MESSAGE_LENGTH];
這是爲什麼?什麼可能導致斷言失敗?謝謝。
您認爲在分配行時分配了多少內存:「char * msg = malloc(sizeof(MESSAGE_LENGTH));」被執行了?想一想:「sizeof(MESSAGE_LENGTH)產生的價值是什麼? – 2011-06-01 05:01:18
我不擅長C,但爲什麼第二個malloc具有sizeof(MESSAGE_LENGTH)??如果MESSAGE_LENGTH是int,那麼第二個malloc分配只有'sizeof(int)'內存量 – Eimantas 2011-06-01 05:13:48