我试图通过使用指向指针的指针来表示字符串数组。所以我定义了 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_COUNT
。 lines
包含 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/