我認爲,一旦你在一個內存位置使用free(),該內存返回到內存,如果你要寫入該位置後釋放,這將是未定義的行爲?這是我的老師的代碼。有人可以解釋他在做什麼嗎?我不明白他爲什麼要寫給剛剛釋放的記憶。謝謝!有人可以解釋什麼這個代碼涉及免費()實際上
void initialize(char ***subjects, char***courses, int **CRNs, int *size)
{
int i;
*subjects = (char**) malloc (INITIAL_COURSE_SIZE * sizeof(char*));
*courses = (char**) malloc(INITIAL_COURSE_SIZE * sizeof(char*));
*CRNs = (int*) malloc(INITIAL_COURSE_SIZE * sizeof(int));
for(i = 0; i < INITIAL_COURSE_SIZE; i++)
{
(*subjects)[i] = (char*) malloc(SUBJECT_SIZE * sizeof(char));
(*courses)[i] = (char*) malloc(COURSE_SIZE * sizeof(char));
} // for i
*size = INITIAL_COURSE_SIZE;
} // initalize()
void resize(char ***subjects, char***courses, int **CRNs, int *size)
{
int i, *CRNs2, size2 = *size * 2;
char **subjects2, **courses2;
subjects2 = (char**) malloc (size2 * sizeof(char*));
courses2 = (char**) malloc(size2 * sizeof(char*));
CRNs2 = (int*) malloc(size2 * sizeof(int));
for(i = 0; i < *size; i++)
{
subjects2[i] = (*subjects)[i];
courses2[i] = (*courses)[i];
CRNs2[i] = (*CRNs)[i];
} // for i
free(*subjects); //WHY DOES HE FREE THIS??????
free(*courses);
free(*CRNs);
*subjects = subjects2;
*courses = courses2;
*CRNs = CRNs2;
for(; i < size2; i++)
{
(*subjects)[i] = (char*) malloc(SUBJECT_SIZE * sizeof(char));
(*courses)[i] = (char*) malloc(COURSE_SIZE * sizeof(char));
} // for i
*size = size2;
} // resize()
而且,如果我做的事:
char **a;
a = (char*)malloc(sizeof(char*) * 100);
難道一個指向整個數組a []?例如,一個[0]和一個[1] ...將是字符指針。指向malloc'd char *的整個塊還是僅指向[0]?謝謝!我真的很感謝幫助!
首先問問自己,「調整大小」的典型用例是什麼......然後你得到了答案。 – 2014-09-25 09:15:03
還沒有讀剩下的,但你的註釋釋放和寫入不是UB,因爲釋放的是指向的指針,而不是指針本身。 – Medinoc 2014-09-25 09:16:29
你的老師應該教人們[不要轉換'malloc()']的返回值(http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)。 – unwind 2014-09-25 09:36:47