我认为,一旦你在一个内存位置使用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