【发布时间】:2020-05-10 05:31:19
【问题描述】:
在这段代码中,当第一个数字是二维数组的大小时,我从文件中获取数字。
在我的代码中我正在定义
char *filename=new char;
(我必须使用 char *filename,这是练习..)
一切正常,直到我尝试delete。 delete 和 delete[] 都给我错误并导致我的程序崩溃。
这是我的完整代码:
#include <iostream>
#include <fstream>
using namespace std;
double **readmat(char *filename, int *size)/////question 2
{
ifstream read(filename);
cout << filename << endl;
if (!read)
{
cout << "Can't open file!" << endl;
exit(1);
}
read >> *size;
double **mat = new double*[*size];
for (int i = 0; i < *size; i++)
{
mat[i] = new double[*size];
for (int j = 0; j < *size; j++)
{
read >> mat[i][j];
}
}
read.close();
return mat;
}
int main()
{
int size;
char *filename = new char;
filename = "text.txt";
double **arr = readmat(filename, &size);
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout << arr[i][j]<<" , ";
}
cout << endl;
}
cout << endl;
delete filename; //<-------- this crashed my code
for (int i = 0; i < size; i++)
{
delete[] arr[i];
}
delete[] arr;
return 0;
}
这是我的文件的样子:
这是控制台应用程序运行代码后的样子:
这是我期望得到的,但我得到了这个错误:
有谁知道这会发生什么,我可以做些什么来解决它?
【问题讨论】:
-
您立即通过分配字符串文字
filename = "text.txt";的地址来覆盖char *filename = new char;持有的地址。问问自己“filename现在指向哪里?” -
您正在为
filename分配一个字符。您可能需要考虑分配更多,例如 64 或 128。
标签: c++ char new-operator dynamic-memory-allocation delete-operator