c - 将内存分配给指向指针变量的指针时出现段错误 [C]

标签 c segmentation-fault malloc

我试图通过使用指向指针的指针来表示字符串数组。所以我定义了 char** arr如下:

uint8_t lines = getLines();
char** arr = malloc (sizeof (char*) * lines);
// char** arr = malloc (sizeof (char*) * ROWS_COUNT);

在调试过程中,上面的行会成功执行,并将内存分配给arr 。当尝试分配足够的内存来保存*(arr + 0)内的字符串时,问题(以及错误)就会出现。如下:

// #define PATH_MAX 4096
*arr = malloc (sizeof (char) * (PATH_MAX + 1));

运行时错误:

Signal: SIGSEGV (Segmentation fault)

注意:我使用了强制转换运算符(第一个赋值为 char** ,第二个赋值为 char* )。这也行不通。

注意:我使用过ROW_COUNTS这里是为了简单起见。原来的代码中有一个lines我使用的变量代替 ROWS_COUNTlines包含 uint8_t值(value)。 (就我而言,3)

最佳答案

您可以在 single malloc() 中动态分配内存,试试这个代码:-

char (*arr)[ROWS_COUNT][PATH_MAX + 1] = malloc (sizeof(*arr));

您可以使用以下方式访问字符串:-

(*arr)[ index ] 

字符使用:-

(*arr)[ row ] [ column ]

示例:-

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PATH_MAX 4096
#define  ROWS_COUNT 500
int main()
{
    char (*arr)[ROWS_COUNT][PATH_MAX + 1] = malloc (sizeof(*arr));
    strcpy((*arr)[400],"Hello World");
    printf("\n String    : %s",(*arr)[400]);
    printf("\n Character : %c",(*arr)[400][2]);
}

输出:-

 String    : Hello World
 Character : l

关于c - 将内存分配给指向指针变量的指针时出现段错误 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51740193/

相关文章:

c++ - 关于在 C/C++ 中比较整数和 float / double

c - postgreSQL 客户端 (libpq) 中的段错误

c - 将指针分配给函数或将其地址作为函数参数传递之间有什么区别吗?

c - 如何屏蔽 32 位整数的最右边的 16 位?

c - 作业 - 二叉搜索树 C

c - 我应该在这个 C 代码中添加什么来打开多个文件?

c++ - "Out of bound iterator"为空集

c - 函数中 malloc 和 sscanf 导致的 seg 错误

C 创建空栈时出错

c - 在 C 中使用指针和 malloc 的两个暗淡数组中的运行时错误