在C中访问和修改字符串(char *)数组时出现段错误

时间:2018-10-24 04:04:01

标签: c arrays pointers segmentation-fault

在我尝试编译一段时间的程序上,并且尝试了很多东西(例如重新编程我使用过的数据结构)后,我一直遇到分段错误(gdb在回溯上打印“ ??”)现在应该可以工作)尽管现在它给了我一行(我在这里添加了评论),但我仍然不断遇到段错误。

getMains()已运行多次以标记同一文件中的不同行。

我希望mains是一个大小为4的数组,但是当将其作为“ char * mains [4]”传递时,II尝试将其传递给数组(*)[4]时出现了编译错误,我从未处理过事先(刚开始使用C)。我假设如果尝试访问未使用的任何部分,可能会出现问题,但问题是在初始化数组的索引时发生的。

我正在尝试使用的代码,其中“ char *** mains”自变量从单独的函数“ runner”中获取&(char **),我希望对其进行编辑,以便在“运行器”中查看其内容:

[['1', 'Manchester City', '9', '7', '2', '0', '26', '3', '23', '23'], ['2', 'Liverpool', '9', '7', '2', '0', '16', '3', '13', '23'], ['3', 'Chelsea', '9', '6', '3', '0', '20', '7', '13', '21'], ['4', 'Arsenal', '9', '7', '0', '2', '22', '11', '11', '21'], ['5', 'Tottenham Hotspur', '9', '7', '0', '2', '16', '7', '9', '21'], ['6', 'Bournemouth', '9', '5', '2', '2', '16', '12', '4', '17'],

关于此的提示或只是通过其他功能安全地修改数组的任何提示?

我应该将getMains()更改为“ getMains(FILE * file,char ** mains [4]);”并通过一个&“ char * mains [4]”)使其成为所需的设置大小?还是会产生错误?

1 个答案:

答案 0 :(得分:2)

您需要为市电分配内存,它应该像这样:

char ** mains;
mains = malloc(some number N * sizeof(char*));

如果不使用strdup,它会为您分配内存,则需要这样的东西:

for (int i = 0; i < N; ++i) {
  mains[i] = malloc(some number K);
}

在所有情况下,请不要忘记对从freemalloc收到的每个指针调用strdup。如果程序在调用free之后立即结束,则可以跳过此部分。