将内存分配给指针到指针变量时的分段错误 [C]



我试图使用指向指针的指针来表示字符串数组。所以我定义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值。(就我而言,3(

可以在单个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
// #define PATH_MAX 4096
*arr = malloc (sizeof (char) * (PATH_MAX + 1));

我认为这条线需要在ROWS_COUNT次的循环中。以便可以为要存储的所有行分配内存。

使用Xcode(版本9.3(9E145((在MAC上测试,工作正常:

char** arr = (char**) malloc (sizeof (char*) * 1000);
int i = -1;
while(++i < 1000)
{
    *(arr + i) = (char*) malloc (sizeof (char) * (PATH_MAX + 1));
}

相关内容

  • 没有找到相关文章

最新更新