动态内存分配错误

时间:2015-01-02 10:28:44

标签: c++ memory dynamic allocation

我对下面的代码有同样的问题。我尝试从文件中读取目的地。

void airplane::readFlight(void)
{
    char temp[100];
    ifstream f("date.txt");
    if(!f)
        {
            cerr<<"Err";
            //exit(EXIT_FAILUARE);
        }
    f>>nrFlight;
    for (int i=0;i<nrFlight;i++)
        {
            f.getline(temp,99);
            destination[i]=new char(strlen(temp)+1);
            strcpy(destination[i],temp);
        }
    f.close();
}

我得到了这个错误:

  1. invalid conversion from ‘char’ to ‘char*’
  2. initializing argument 1 of ‘char* strcpy(char*, const char*)’
  3. Invalid arguments 'Candidates are:char * strcpy(char *, const char *)
  4. 当我分配内存并尝试复制信息时,会出现此错误。 THX。

2 个答案:

答案 0 :(得分:1)

可能性1

如果你想拥有一个包含n个字符串元素的动态数组目的地(而不是未格式化的char数组),你应该首先声明它:

string* destination = new string [n];

然后你可以使用它:

char temp[100];
[...]
f.getline(temp,99);
destination[i] = temp;

不要忘记释放记忆:

delete[] destination;
destination = NULL;

可能性2

如果要使用char数组,则destination必须是char数组的数组( - &gt; 2-dimensional)。声明:

char** destination = new char* [n];

用法:

char temp[100];
[...]
f.getline(temp,99);
destination[i] = new char [strlen(temp)+1];
strcpy(destination[i],temp);

释放记忆:

for(i=0 ; i<n ; i++)
{
   delete[] destination[i];
   destination[i] = NULL;
}
delete[] destination;
destination = NULL;

答案 1 :(得分:0)

应该是:

destination[i] = new char[strlen(temp)+1];

请参阅What's the difference between new char[10] and new char(10)

我怀疑你对destination的声明也有问题。如果您将其添加到问题中,我将在此处添加更正。