释放指针内容

问题描述 投票:0回答:1

我对 2 个不同的变量进行静态和动态分配。所以,我有两个指针变量的相同地址。

char **input;
char **output = (char **)malloc(sizeof(char));
input = output;

我的问题如下:我以前的静态分配变量会释放字符大小的内容吗?未定义的行为?当然,当 programm 结束调用堆栈时。

pointers static stack dynamically-generated
1个回答
0
投票

首先,你应该分配如下:

char **output = (char **)malloc(sizeof(char*)*(amount of rows));

因为您正在制作一个 8 字节的指针列表,而 char 只有 1 个字节。 无论哪种方式,每当您在输出上调用 free 时,您都会释放 1 个字节,因为您分配了 1 个字符(即 1 个字节)的大小。

静态分配的变量由编译器分配并在超出范围时释放,因此您只需要担心释放动态分配的内存(指针)

输入和输出指向同一个内存空间,在堆上保留1个字节。

您不释放“字符大小的内容”,而是释放您在 malloc 中分配的内存量。

© www.soinside.com 2019 - 2024. All rights reserved.