Paweł Nowicki Oracle Developer
Temat: Problem z dynamicznym przydzielaniem pamięci w prostym...
Dawno nie pracowałem w C, a ostatnio dostałem kilka zadań do zrobienia. Mam problem, najprawdopodobniej z przydzielaniem pamięci i jej zwalnianiem. Pod kompilatorem Microsoft Visual C++ 2008 Express Edition wszystko działa ok do momentu zwalniania pamięci, a pod DevC++ pojawiają błędy sporadycznie wcześniej, ale już nie wiem co może być przyczyną [przykładowa seria danych: 7,7,8,9, lub, 7,9,8,7,8,9..]treść zadania:
Napisz program, w którym utworzysz w sposób dynamiczny dwuwymiarowa tablice o zadanej z klawiatury
liczbie wierszy n. Dla ka$dego wiersza program pozwala ustalic z klawiatury liczbe kolumn (z zakresu 1–
80). Wypełnij tablice kolejnymi liczbami całkowitymi, poczawszy od 1 i wypisz ja na ekranie.
Przykładowo, dla n = 3 oraz kolumn k1=1, k2=2, k3=3 na ekranie powinno sie znalezc:
1
2 3
4 5 6
mój kod:
Paweł Nowicki edytował(a) ten post dnia 28.10.08 o godzinie 09:54
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
// ####### FUNKCJE #########
int* add_kol_2_row(int i, int &licznik){
//kolumna
int k=0;
while(!((k>=1) && (k<=80))){
cout << " Podaj liczbe kolumn w wierszu " << i+1 << ": ";
cin >> k;
cout << "\n";
}
int* kolumny;
kolumny= new int[k];
kolumny[0]=k; //dopisuje na początku kolumny
// informacje o jej dlugosci
for(int i=1;i<=k;i++){//uzupełnianie kolejnymi liczbami
kolumny[i]=licznik;
(licznik)++;//zwiększanie licznika
}
return kolumny;//zwraca adres do kolumn
}
int show_row(int* row , int i){
for(int i=1;i<=row[0];i++){
cout << row[i] << " ";
}
cout << "\n" ;
return 0;
}
int del_row(int* row){
delete [] row;
return 0;
}
// ###### endFUNKCJE ######
int main ()
{
int n=0;
cout << "p.2.1.\nWprowadz liczbe \'n\'. Program utworzy tabele o wymiarze \'n\'. \n";
cin >> n;
cout << "\n";
int** tablica;
int licznik=1;//początek wypełniania od tej liczby
tablica= new int* [n];
for(int i=0;i<n;i++){//dodawanie kolejnych wierszy
tablica[i] = add_kol_2_row(i, licznik);
}
for(int i=0;i<n;i++){//wyświetlanie wierszy
show_row(tablica[i], i);
}
getch();
// ###### ZWALNIANIE PAMIĘCI ######
/*
for(int i=0;i<n;i++){//zwalnianie pamieci kolumn
del_row(tablica[i]);
}*/
delete [] tablica; //zwalnianie pamieci wierszy
return 0;
}