【问题标题】:Assigning a string from a 2-D pointer array to a 1-D Pointer Array将二维指针数组中的字符串分配给一维指针数组
【发布时间】:2016-02-20 22:29:02
【问题描述】:

目前,我只需要使用数组和指针来执行此操作(因此不需要结构或数据结构)

我正在尝试追加以数组表示的现有数据表。我这样做的方法是从文件中获取数据并将其全部放入一个指针数组中,只要我想显示它,我就会通过函数将其转换为二维数组。

我现在的问题是我正在附加数据,当我的程序进入我将更多数据分配到指针数组的代码部分时,我的程序崩溃了

void appendCurTable(int oldSize, int newSize, string **ptTempData)
{
    int oldRow, newRow;
    string curFileName = "records/current.dat";
    oldRow = (oldSize/col);
    newRow = (newSize/col);
    i=0;
    int a = i+oldSize;
    readCurFile(curFileName, newSize);
    for(ir=oldRow;ir<newRow;ir++)
    {
        for(ic=0;ic<col;ic++)
        {
            *(tablePtr + a) = ptTempData[ir][ic];
            i++;
        }
    }
} 
//How tablePtr is initialized
void readCurFile(string a, int size)

{
    i = 0;
    ifstream infile;
    infile.open(a.c_str());

    tablePtr = new string[size];
    if(tablePtr==NULL)
    {
        cout<<"Insufficient Memory Allocation.\n Program will terminate.";
        exit(1);
    }

    if(infile.is_open())
    {
        while(infile.good())
        {
            getline(infile, *(tablePtr +i), ';');
            i++;
        }
        infile.close();
    }
    else
    {
        cout<<"Error opening file.";
    }

}

readCurFile 创建包含原始数据和附加数据的新指针数组。

原谅我的混乱,我一直在到处修补,看看我所做的更改是否能解决它。经过所有这些修补后,我发现 for 循环中的部分导致了崩溃。

有没有办法使用指针数组来完成这项工作,或者我注定要失败?

【问题讨论】:

  • 您能否就您使用的值提供更多具体示例?另一方面,我认为您需要增加 a 而不是 i。
  • 我也试过增加 a 还是没解决。值都是字符串数据类型。
  • 您的代码中有一些不一致的地方。 tablePtr 来自哪里?然后在嵌套的 for 中,您基于 a 进行分配,当您递增 i 并且 a 或 tablePtr 正在移动时,它们在所有周期中都指向同一个内存地址。
  • tablePtr 此时是一个全局数组。我只是尝试使用 i 本身并增加 i。它仍然崩溃..
  • 你是如何初始化tablePtr的?

标签: c++ arrays pointers dynamic-memory-allocation


【解决方案1】:

我找到了答案。我正在使用将 ir 引用到不正确的数字。 ir 的函数应该是我在函数 Append 中声明的 i。

正确代码:

void appendCurTable(int oldSize, int tempSize, int newSize, string **ptTempData)
{

    string curFileName = "records/current.dat";
    i=oldSize;
    readCurFile(curFileName, newSize);
    for(ir=0;ir<tempSize;ir++)
    {
        for(ic=0;ic<col;ic++)
        {
            tablePtr [i] = ptTempData[ir][ic];
            i++;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2020-08-21
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多