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

标签 c string char segmentation-fault

我想要** 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/

相关文章:

java - 编写一个程序,从键盘读取字符,直到读取换行符 '\n'

c - GCC 4.0 : How do you remove unnecessary -arch flags 的 R-Perl 安装问题

c - 如何调试在调试器中运行的 C 代码?

c - 释放分配的内存时堆损坏

c - 在 C 中声明字符数组的最佳实践

Java - char、int 转换

c - 如何在c中立即启动定时器

Python 从列表中返回不区分大小写的字符串,如果它包含不区分大小写的子字符串

c - C 中的字符串复制

C 在函数中分配指针,不会改变原始指针(void *)