gpt4 book ai didi

c - C中二维字符数组的动态分配

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:03 25 4
gpt4 key购买 nike

我知道每次添加项目时都使用 realloc 是个坏主意,但我只是想在这里学习内存管理。为什么这个程序会崩溃?

#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "some text";
char **stringList = (char**) malloc( sizeof(char*));

for (int n=0;n<15;n++){
stringList[n] = (char*) malloc( (strlen(str)+1) );
strcpy(stringList[n], str);
stringList=realloc(stringList, (n+2) * sizeof(char*));
n++;
}

return 0;
}

最佳答案

它崩溃的原因是因为你在递增 n两次。你有 n++for() header ,然后再次出现在循环的底部。

第一次通过循环一切正常。您对数组的初始分配有 1 个元素,您已设置 n = 0 , 所以分配给 stringList[n]很好。

然后你做realloc(stringList, (n+2)*sizeof(char*)) .现在数组有 2 个元素。

n++在循环底部设置 n = 1 , 和 n++for() header 集 n = 2 .

然后你回到循环体,尝试赋值给stringList[n] .这是在数组边界之外,因为 n = 2唯一有效的索引是 stringList[0]stringList[1] .

这在循环中每隔一段时间重复一次,总是分配给刚刚结束的数组元素。在数组边界之外访问会导致未定义的行为,并因此导致崩溃。

去掉 n++在循环的底部,你应该没问题。

关于c - C中二维字符数组的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314807/

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