C - 初始化指针数组

标签 c arrays pointers

我正在尝试初始化一个指针数组,但是当我尝试在主函数中打印它时,它不起作用,它显示段错误,但如果我尝试以与打印相同的方法打印它

这是我的代码

typedef struct File
{
    char fileName[Max_FILE_NAME_LENGTH];
    char *listOfFiles[];
}File;

File dependencies[MAXIMUM_FILES];

void findListOfFiles(char *line, int i, int currDepend)
{
int idx=0,numOfFiles=0;;
while(line[i]!='\n')
{
    char *name=(char *)malloc(65*sizeof(char));
    while(line[i]!=',' && line[i]!='\n')
    {
        name[idx]=line[i];
        i++;
        idx++;
    }
    name[idx]='\0';
    dependencies[currDepend].listOfFiles[numOfFiles]=name;
    printf("%s+", dependencies[currDepend].listOfFiles[numOfFiles]);
    if(line[i]=='\n')
    {
        if(name){
            free(name);
            name=NULL;
        }
        break;
    }
    if(name){
        free(name);
        name=NULL;
    }
    numOfFiles++;
    i++;
    idx=0;
}
}

最佳答案

您实际上从未在任何地方为 listOfFiles 成员分配空间。这意味着该数组的大小本质上为零,因此对其中任何条目的所有写入都将超出范围。

如果您希望dependency成为全局变量,则必须为listOfFiles数组设置固定大小,或者将其设置为指针到指针并需要时分配/重新分配。

此外,在将指针name分配给数组后,您就可以释放这个分配的内存,这意味着数组中的指针现在指向已释放的内存。

关于C - 初始化指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19894340/

相关文章:

c++ - 在 c/c++ 代码中使用什么宏来识别 Mavericks OSX 10.9?

c - 返回两个指向动态数组的指针

python - numpy.unravel_index 不返回预期的行索引

c - Strstr 返回 NULL

c - 对指向字符串文字的指针的算术运算。

c++ - 读取的通信设备类 (CDC) 问题

c - Arduino Due C 定时器编码(中断计数)

c - 在 8 位 SFR(特殊寄存器)上定义引脚

c++ - 未初始化的局部变量并帮助更正

C - 我的指针的值自行改变