C - 如何将数组指针设置回第一个内存字节

ant*_*ngl 0 c memory pointers

我有一个指向struct的指针数组,在处理完数组后,指针位于内存块的末尾.我想释放内存块,所以我需要转到第一个内存字节并再次循环遍历指针数组以释放数组中的每个元素.你会如何指回内存块的第一个字节?

pax*_*blo 7

您必须记住原始地址或知道您所在的位置(索引),以便您可以备份足以找到开始.

第一个例子(暂时忽略,在所有这些情况下,你打印未初始化的值,毕竟这是一个人为的例子):

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)

无论如何,大多数现代编译器都会为您提供相同的代码.


Mar*_*ett 6

没有自动方式 - 您必须将原始位置传递给免费.

常用技术是制作原始指针的副本,或者如果你知道条目的数量和它们的大小,你可以从指针中减去它