C语言 分段错误字符**在malloc之后



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

但是,我在此块的第二行上遇到了分段错误。

我做错了什么?

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

这是指针的经验法则,每个 * 都应该有一个 malloc,这意味着对于char **你应该有一个用于char *的 malloc 和另一个用于char

有时玩指针也有点误导,为了可读性,应该使用括号来代替

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

使用单个malloc也可以这样做

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

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

相关内容

  • 没有找到相关文章

最新更新