gpt4 book ai didi

c - while 循环中的 Free()

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:58 24 4
gpt4 key购买 nike

我正在尝试运行这个创建字符数组并动态分配内存的程序。稍后,数组元素将在 10 个连续位置填充字符串“hello”。使用 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 );

关于c - while 循环中的 Free(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26229842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com