gpt4 book ai didi

c - malloc 之后出现段错误 char**

转载 作者:行者123 更新时间:2023-11-30 14:35:54 25 4
gpt4 key购买 nike

我想要** char FinalString,即*char列表。我的函数运行后,每个 *char 指针包含一个 char 'A'、'B'、'C',然后可以将其传递给需要参数的函数输入char**。每个字符串必须是单独的,但位于同一数组中,因此是 **

创建这个**char,我写了以下内容:

char ** finalString;
finalString = malloc(sizeof(char*)*3);
int stringAddressCounter = 0;

然后,为了向其中添加一个字符,我尝试了以下操作:

char ** nextStringAddress = finalString + stringAddressCounter;
** nextStringAddress = 'A';
stringAddressCounter++;

但是,我在该 block 的第二行遇到段错误。

我做错了什么?

最佳答案

您为 char* 分配了内存,但没有为要存储的 char 分配内存。

这是指针的经验法则,每个 * 都应该有一个 malloc,这意味着对于 char **,您应该为 char * 分配一个 malloc,为 分配另一个 malloc >字符

有时使用指针会有点误导,应该使用括号来提高可读性

char ** nextStringAddress = finalString + stringAddressCounter;
nextStringAddress[stringAddressCounter] = malloc(sizeof **nextStringAddress * 3)
nextStringAddress[stringAddressCounter][0] = 'A';
nextStringAddress[stringAddressCounter][1] = 'a';
nextStringAddress[stringAddressCounter][2] = '\0';
stringAddressCounter++;

也可以像这样使用单个 malloc

char ** nextStringAddress = finalString + stringAddressCounter;
nextStringAddress[stringAddressCounter] = "Aa";
stringAddressCounter++;

请注意这里 Aa 周围的双引号以及缺少的第二个括号。应该注意的是,通过这样做,您实际上是在分配一个只读的内存区域,并且通过尝试在该内存上分配,将会导致段错误。

关于c - malloc 之后出现段错误 char**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295267/

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