正確的值這是從GDB:Ç - unsigned int類型並沒有得到執行任務
22 database->size = size;
(gdb) n
23 return database;
(gdb) p size
$6 = 1401
(gdb) p database->size
$7 = 3086862424
(gdb) p &size
$8 = (unsigned int *) 0xbffff050
(gdb) p &database->size
$9 = (unsigned int *) 0xb7fc6ff8
這是從代碼:
typedef struct _DATABASE {
RESULT* res;
unsigned int size;
} DATABASE;
....
....
DATABASE* alloc_database(unsigned int size, DATABASE* database)
{
database = (DATABASE*) malloc (sizeof(DATABASE));
if (!database) return NULL;
database->res = (RESULT*) malloc (sizeof(RESULT) * size);
if (!database->res) {
free_database(database);
return NULL;
}
memset(database->res, 0, sizeof(RESULT) * size);
database->size = size;
return database;
}
你可以看到,這兩個數據庫 - >尺寸和大小都來自(無符號整型)類型,在代碼和gdb中,但由於某種原因,賦值後的值不同。
有誰知道這是什麼原因?
曾聽說過'calloc()'?它確實在一個函數調用中分配和調零 - 並且可以使用最佳效率的調零,因爲它知道memset()不支持的地方數據是對齊的。 –
你確定你的代碼是沒有優化編譯的嗎? – nos
調用函數是什麼樣的? –