我有一个指向struct的指针数组,在处理完数组后,指针位于内存块的末尾.我想释放内存块,所以我需要转到第一个内存字节并再次循环遍历指针数组以释放数组中的每个元素.你会如何指回内存块的第一个字节?
您必须记住原始地址或知道您所在的位置(索引),以便您可以备份足以找到开始.
第一个例子(暂时忽略,在所有这些情况下,你打印未初始化的值,毕竟这是一个人为的例子):
int *ip = malloc (10 * sizeof (*ip));
int *origIp = ip;
printf ("%d\n", *ip++); // print and advance
printf ("%d\n", *ip++); // print and advance
ip = origIp; free (ip); // or just free (origIp) if you wish.
Run Code Online (Sandbox Code Playgroud)
对于第二个:
int *ip = malloc (10 * sizeof (*ip));
int idx = 0;
printf ("%d\n", *ip++); idx++; // print and advance
printf ("%d\n", *ip++); idx++; // print and advance
ip -= idx; free (ip);
Run Code Online (Sandbox Code Playgroud)
或者,您可以保持指针不变,并使用数组索引来处理数组,如:
int *ip = malloc (10 * sizeof (*ip));
int idx = 0;
printf ("%d\n", ip[idx++]); // print and advance
printf ("%d\n", ip[idx++]); // print and advance
free (ip);
Run Code Online (Sandbox Code Playgroud)
无论如何,大多数现代编译器都会为您提供相同的代码.