【发布时间】:2021-12-25 04:32:15
【问题描述】:
我想在一个数组中存储多个字符串(也就是字符数组)。因此,我想使用二维数组。由于我不知道确切的大小(单个字符串的长度和字符串的数量),我需要动态增加大小。
为了更好的结构,我想把这个放在一个单独的函数里面。但是,如果我在调整数组大小后访问我的数组,显然大小没有改变,我会遇到分段错误。
我是 C 的新手(来自 C++ 背景)
#include<stdio.h>
#include <stdlib.h>
//I want to increase my array from [1][5] to [2][5]
void increase(char*** data)
{
*data = realloc(*data, 2 * sizeof (char*));
*data[1] = calloc(5, sizeof(char));
}
int main(void)
{
char** data = calloc(1, sizeof(char*));
data[0] = calloc(5, sizeof(char));
increase(&data);
data[1][3] = 'a'; //<-- When I access the array I get an segmentation fault
free(data);
return 0;
}
我使用char*** 的方法是否正确?我可以直接在主函数中的测试环境中实现它并且它有效。但是,一旦将它封装在一个函数中,我就得到了一个 seg。故障。
我认为这与我将数组传递给函数的方式有关,但我无法弄清楚这是什么原因以及如何解决它。有没有人有一些想法或解决方案?
【问题讨论】:
-
@AdrianMole 你是对的。刚刚修复了这个例子。
-
请注意
*data[1]被解析为*(data[1]),而不是(*data)[1]。而data[1]不存在
标签: c function multidimensional-array segmentation-fault dynamic-memory-allocation