Piszę program, przy użyciu funkcji z biblioteki windows.h, który ma za zadanie stworzyć plik, zmapowanie go, a następnie zapisanie do niego tablicy złożonej z wartości typu double. Jedyne, co nie działa poprawnie jest sam zapis do pliku, gdyż zamiast wartości double widoczne są pliku "dziwne" znaki. Liczę na podpowiedzi, co robię nie tak.
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
double **createMatrix()
{
double **matr = (double **)malloc(8*sizeof(double*));
if (!&matr)
{
puts("Can't allocate memory!");
abort();
}
for (int i = 0; i<8;++i)
{
matr[i] = (double *)malloc(12*sizeof(double));
}
for (int i=0;i<8;++i)
{
for(int j=0;j<12;++j)
{
matr[i][j]=(i+1)*(j+3);
printf("%.2lf ",matr[i][j]);
}
printf("\n");
}
return &matr[0];
}
void freeMatrix(double **a)
{
for (int i=0;i<8;++i)
{
free(a[i]);
}
free(a);
}
int main(int argc, char **argv)
{
HANDLE plik, mappedFile;
char *poi;
LPCWSTR fileName = L"plik.txt";
double **matrix = createMatrix();
plik = CreateFile(fileName, GENERIC_READ|GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);
if (!plik)
{
puts("Can't create file!");
abort();
}
mappedFile = CreateFileMapping(
plik,
NULL,
PAGE_READWRITE,
0,
96*sizeof(double),
NULL);
poi = (char *)MapViewOfFile(
mappedFile,
FILE_MAP_ALL_ACCESS,
0,
0,
0);
if (!poi)
{
puts("Can't allocate Memory!");
abort();
}
memcpy(poi,matrix,96*sizeof(double));
UnmapViewOfFile((void*)poi);
CloseHandle(mappedFile);
CloseHandle(plik);
freeMatrix(&matrix[0]);
getchar();
return 0;
}