gpt4 book ai didi

c - 尝试在 C 中创建动态分配的字符串数组时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:01 26 4
gpt4 key购买 nike

我正在尝试制作一个将字符串和整数写入文件的函数。我的部分方法涉及创建一个二维动态数组来保存一系列字符串。没有编译时错误。但是,当我尝试运行该程序(该函数加上一个 main 以在内部对其进行测试)时,我不断收到段错误。到目前为止,我已经将其追溯到我在下面突出显示的特定代码部分。据我所知,似乎我尝试打开数组是导致段错误的原因(我使用了一个带有 %p 字符的调试字符串来确保该数组实际上在内存中)。我不能为我的生活说出为什么。为方便起见,我只包含了与段错误相关的代码以及声明/初始化。如果你想让我提供整个主要的,请告诉我。需要明确的是,我已经尝试通过 Google 寻找解决方案,但到目前为止我发现的所有内容要么我不理解,要么与我的情况不相关。

int data_cat_num=0,current_cat=0,col_index=0;
char **cat_names;

printf("How many data categories will there be?:");
scanf("%d",&data_cat_num);

cat_names=malloc(data_cat_num*50);/*Currently defaulting to 50 bytes per name*/

while(current_cat<data_cat_num){
col_index=0;
printf("What is the name of category %d?",current_cat+1);
while(cat_names[current_cat][col_index]!='\n'){/*SEG FAULT TRACED TO THIS*/
cat_names[current_cat][col_index++]=getchar();/*LOOP!!!!!*/
}
cat_names[current_cat][col_index]='\n';
current_cat++;
}

最佳答案

这一行:

cat_names=malloc(data_cat_num*50);

不为每个名称分配 50 个字节;它分配 data_cat_num*50 名称。你需要这样做:

cat_names = malloc(data_cat_num * sizeof(char *));
int i;
for(i = 0; i < data_cat_num; i++)
cat_names[i] = malloc(50);

第一行分配 data_cat_num 名称(即 char * 变量),随后(在 for 循环中),每个名称分配 50 个字节。

编辑另外,当你释放这段内存时,你需要这样做:

for(i = 0; i < data_cat_num; i++)
free(cat_names[i]);
free(cat_names);

关于c - 尝试在 C 中创建动态分配的字符串数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088626/

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