在while循环中的Free()

斯坎达

我正在尝试运行此程序,其中创建了字符数组并动态分配了内存。之后,在数组元素中使用字符串“ hello”填充10个连续的位置。使用strdup()函数调用将这些值分配给字符串元素。

分配完所有元素后,将在while循环中释放这些元素。当我在Visual Studio中运行该程序时,在释放了指向char数组的最后一个指针后,该程序崩溃了。我相信while循环的终止条件是正确的。但是我无法确定到底是什么引起了该问题。

代码:

char **p;
int i;

p = malloc(10 * sizeof(char *));
for (i = 0; i < 10; i++) {
    p[i] = strdup(“hello”);
}

while (*p) {
 free(*p++);
}
来自莫斯科的弗拉德

如果您非常想使用while循环,则应按以下方式编写代码

char **p;
int i;

p = malloc(11 * sizeof(char *));
for (i = 0; i < 10; i++) {
    p[i] = strdup(“hello”);
}

p[i] = NULL;

while (*p) {
 free(*p++);
}

考虑到还需要释放p本身的初始值。因此,带有while循环的正确代码可能看起来像

char **p;
int i;

p = malloc(11 * sizeof(char *));
for (i = 0; i < 10; i++) {
    p[i] = strdup(“hello”);
}

p[i] = NULL;

char **q = p;

while (*q) {
 free(*q++);
}

free( p );

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章