C初学者问题:指针算法>完成后清理

Fra*_*lea 5 c pointers memory-management pointer-arithmetic

我正在慢慢掌握指针.但是我还有一些问题.

使用指针运算时是否可能导致内存泄漏,因为您正在移动指针指向的实际位置?

我的意思是,如果说我向上计数要用char复制字符串char,我是否需要倒数以便C"知道"指针指向的位置?

谢谢弗兰克

ins*_*ity 8

使用malloc()或类似功能时可能会发生内存泄漏,而free()在需要时不会调用.free()应始终使用返回的指针调用,malloc()如果您执行以下操作,则为yes:

int* ptr = malloc(sizeof(int));
free(ptr + 1);
Run Code Online (Sandbox Code Playgroud)

导致未定义的行为.可能是内存泄漏,可能是分段错误,一切皆有可能.


Joe*_*Joe 8

内存在堆上分配.指针就是指向内存中位置的指针.您需要知道已分配内存的起始地址,以便以后释放它.

这是因为内存管理系统需要记住有关已分配内存的信息(例如分配了多少内容),因此它知道稍后要释放多少,并防止它将同一块分配给另一个malloc调用.内存的起始地址是标识它的内容.

如果你想摆弄指针,请复制它,不要修改原始指针.

int *x = malloc(...);
int *y = x;

... pointer arithmetic with y

free(x);
Run Code Online (Sandbox Code Playgroud)