我正在尝试运行该程序,其中创建了字符数组并动态分配了内存。之后,在数组元素中使用字符串“ 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] 删除。
我来说两句