使用char *进行内存分配

时间:2017-06-01 08:08:48

标签: c memory memory-management allocation

当您将内存分配给char* p时,它在其指向的堆部分具有内存位置。 但是,一旦执行了以下行,它是否会指向数据部分的新内存位置并为其指定指针?

char* p = "newstring";

如果是这样,之后无法找到已分配的内存并将其释放?

4 个答案:

答案 0 :(得分:3)

有例如。

char *p;
p = malloc(SOME_SIZE);
p = "some string";

相当于

int i;
i = 5;
i = 10;

当您将指针重新分配给其他位置时,您会丢失指针的原始值,它最初指向的位置。这将导致内存泄漏

答案 1 :(得分:2)

简单的答案是否定的。一旦覆盖了指针的副本,就无法再将其取回。

实际上,内存管理器知道指针,但没有标准的方法来获取它。

答案 2 :(得分:0)

保留p指针值的副本以释放它:

char * pp = p;
p = "newstring";
...
free( pp );

在新作业之前免费:

free( p ); // only if p is previously assigned with malloc()
p = "newstring";

答案 3 :(得分:0)

导致指针的旧值永远丢失(除非您将其缓存在某处)。这会导致内存泄漏,内存被分配但未被任何活动指针引用。

int main() {
    ios_base::sync_with_stdio(false);

    char* p = (char*)malloc(sizeof(char)*100);
    printf("%p\n",p);

    p = "random string";
    printf("%p\n",p);
    return 0;
}

输出如下内容: 0x55592ed2cc80 0x55592da03f24

如果你需要释放指针,那么缓存你要覆盖的值。