C++动态二维数组:从txt读取数据 其后返回指针 再输出
C++动态二维数组:从txt读取数据 然后返回指针 再输出
我是想先从txt文档中 读取数据 利用指针返回 再在主函数中输出
编译时 11.exe - 0 error(s), 0 warning(s) 也没有错误啊
但是程序会自动崩溃
不知如何是好
各位大神看看代码
哪个地方有错误啊
谢谢啦
#include "stdio.h"
#include<windows.h>
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
#define N 10000
int i,j;
float **num;
float** zb()
{
FILE *f;
int Index[N],i=0,j;
char str[100],*pNext;
f=fopen("C:\\22.txt","r");//打开文件
if(f==NULL) {cout<<"Error, file don't open!"<<endl; return 0;}//如果文件没有打开就退出报错
while(!feof(f))//检测是否读到了文件结尾
{
float **num=new float *[840];
for(int i=0;i<840;i++)
{
num[i]=new float [3];
fgets(str,10000,f);//以文本形式从文件中读出一行
Index[i]=atoi(str);//将类别标识转换为整型数,赋值
pNext=str;
for(j=0;j<3;j++)
{
pNext=strchr(pNext+1,',');//搜索数据间的分隔符
num[i][j]=atof(pNext+1);//将类别标识转换为浮点型数,赋值
}
}
}
fclose(f);//关闭文件。
return num;
}
void main()
{
float pp[840][3];
float**p;
p=num;
zb();
for (i=0;i<840;i++)
{
for (int j = 0; j <3; j++)
{
pp[i][j]=*(*(p+i)+j);
cout<<pp[i][j];
Sleep(1000);
}
}
for(i=0;i<840;i++)
delete[]num[i];
delete[]num;
}
------解决方案--------------------
全局变量num一直是野指针,未分配内存。函数float** zb() 里被分配内存的float **num=new float *[840];是局部变量,但返回的是全局变量num。最后delete释放内存的时候,全局变量num还是野指针。
我是想先从txt文档中 读取数据 利用指针返回 再在主函数中输出
编译时 11.exe - 0 error(s), 0 warning(s) 也没有错误啊
但是程序会自动崩溃
不知如何是好
各位大神看看代码
哪个地方有错误啊
谢谢啦
#include "stdio.h"
#include<windows.h>
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
#define N 10000
int i,j;
float **num;
float** zb()
{
FILE *f;
int Index[N],i=0,j;
char str[100],*pNext;
f=fopen("C:\\22.txt","r");//打开文件
if(f==NULL) {cout<<"Error, file don't open!"<<endl; return 0;}//如果文件没有打开就退出报错
while(!feof(f))//检测是否读到了文件结尾
{
float **num=new float *[840];
for(int i=0;i<840;i++)
{
num[i]=new float [3];
fgets(str,10000,f);//以文本形式从文件中读出一行
Index[i]=atoi(str);//将类别标识转换为整型数,赋值
pNext=str;
for(j=0;j<3;j++)
{
pNext=strchr(pNext+1,',');//搜索数据间的分隔符
num[i][j]=atof(pNext+1);//将类别标识转换为浮点型数,赋值
}
}
}
fclose(f);//关闭文件。
return num;
}
void main()
{
float pp[840][3];
float**p;
p=num;
zb();
for (i=0;i<840;i++)
{
for (int j = 0; j <3; j++)
{
pp[i][j]=*(*(p+i)+j);
cout<<pp[i][j];
Sleep(1000);
}
}
for(i=0;i<840;i++)
delete[]num[i];
delete[]num;
}
------解决方案--------------------
全局变量num一直是野指针,未分配内存。函数float** zb() 里被分配内存的float **num=new float *[840];是局部变量,但返回的是全局变量num。最后delete释放内存的时候,全局变量num还是野指针。