Dwuwymiarowa tablica dynamiczna - Access violation writing location

0

Proszę o pomoc, jeżeli utworzę normalną tablicę wszystko działa

 
#include <iostream>
#include <Windows.h>
using namespace std;

int szerokosc = 20; //17
int wysokosc = 21; //25

int**   allocMatrix2D(int,int);
void    deleteMatrix2D(int**&);

int main(void) {

	int** SiatkaPlanszy = allocMatrix2D(szerokosc,wysokosc);

	for( int lw = 0; lw <= wysokosc -1; lw++)
		SiatkaPlanszy[lw][0] = -1;

	for( int pw = 0; pw <= wysokosc -1; pw++)
		SiatkaPlanszy[pw][szerokosc-1] = -1;
	
	for( int p = 0; p <= szerokosc -1; p++)
		SiatkaPlanszy[wysokosc-1][p] = -1;

    deleteMatrix2D(SiatkaPlanszy);

	system("pause");
}

int** allocMatrix2D(int dim1, int dim2) {
    int** matrix2d = new int*[dim1];
    int*  dumm     = new int[dim1*dim2];
    for ( int i = 0; i < dim1; i++ )
        matrix2d[i] = dumm + i*dim2;
    return matrix2d;
}

void deleteMatrix2D(int**& matrix2d) {
    delete [] matrix2d[0];
    delete [] matrix2d;
    matrix2d = 0;
}
0
#include <iostream>
#include <Windows.h>
using namespace std;
  
int** allocMatrix2D(int dim1, int dim2);
void deleteMatrix2D(int**& matrix2d, unsigned int dim1);

int main(void) 
{
    int szerokosc = 20; //17
    int wysokosc = 21; //25

    int** SiatkaPlanszy = allocMatrix2D(szerokosc, wysokosc);
 
    for( int lw = 0; lw < wysokosc; lw++)
        SiatkaPlanszy[0][lw] = -1;
 
    for( int pw = 0; pw < wysokosc; pw++)
        SiatkaPlanszy[szerokosc-1][pw] = -1;
 
    for( int p = 0; p < szerokosc; p++)
        SiatkaPlanszy[p][wysokosc-1] = -1;
 
    deleteMatrix2D(SiatkaPlanszy, szerokosc);
 
    system("pause");
}
 
int** allocMatrix2D(int dim1, int dim2) 
{
    int** matrix2d = new int*[dim1];
    for(int i = 0; i < dim1; i++)
    {
        matrix2d[i] = new int[dim2];
    }
    return matrix2d;
}
 
void deleteMatrix2D(int**& matrix2d, unsigned int dim1) 
{
    for(int i = 0; i < dim1; i++)
        delete [] matrix2d[i];

    delete [] matrix2d;
    matrix2d = 0;
}

http://ideone.com/beqH9V

0

Mylisz szerokość z wysokością.

SiatkaPlanszy[pw][szerokosc-1]

dla pw = 20, odnosisz się do SiatkaPlanszy[20][19]. Problem w tym, że SiatkaPlanszy ma tylko 20 elementów.

Ogółem lepiej użyj jakiegoś wektora i napisz sobie na szybko widok 2D dla niego. Albo użyj Boost.MultiArray.

1 użytkowników online, w tym zalogowanych: 0, gości: 1