为char ** seg faulting分配值

时间:2017-10-16 20:09:46

标签: c

我有一个解析文本文件的程序,并将其存储在指针数组中。我只有一个问题。我正在尝试在char **对象中存储一个字符串数组,但每当我为char **赋值时,我都会遇到seg错误。

#include "database.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char **get_values(int recipe_num, char *file) {
    int placehold_num=recipe_num;
    char *text=parse_recipes(file);
    int num_recipes=count_recipes(file);
    char **array_strings;
    int index=-1;
    for (int i=0;*(text+i)!='\0';i++) {
        if (*(text+i)=='R' && *(text+i+1)=='e' && *(text+i+6)==':' && (text+i+7)==' ') {
            i+=13;
            index++;
            for (int j=0;*(text+i+j-1)!='\n';j++) {
                printf("%c",*(text+i+j));
                *(*(array_strings+index)+j)=*(text+i+j);
            }
        }

    }

}

这会从*(text+i+j)打印出我想要的字符,但是下一行会出现seg错误。我非常确定调用另一个函数不是问题,我认为它必须是我解除引用array_strings的方式。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

问题在于

*(*(array_strings+index)+j)=*(text+i+j);

您创建一个变量

char** array_strings;

它现在指向一些垃圾,你可以通过调用

来查看当前地址
print("%p\n", array_strings);  

我强烈建议您按array_strings初始化NULL,因为一旦您可以收到指向内存的指针,您可以在其中写入,并且它将写入某个位置,您可以在其中存储其他数据,你将破坏这两个数据。如果是NULL,您将始终收到segfault。因此,目前您尝试将值*(text+i+j)分配给内存中的随机位置。

要做,你想要什么,你必须

char** array_strings = (char**)malloc(n * sizeof(char*));

其中n是您需要的字符串数量,然后在循环中执行

array_strings[some_your_index] = text+i+j;

array_strings[some_your_index]现在为char*text+i+j为。