#18 zlz
Ou. Už to vidím. ... Si budu muset naliskat sám, páč tu nikdo není, jestli je to ta chyba. Vyzkouším ráno. x D. Díky.
Příspěvky odeslané z IP adresy 89.203.212.–
Na C nejsem bohužel žádný expert, takže pochybuju, že bych to napsal lip.
Myšlenka je, že je tam pole, který má N řádků. A když ho chci přidat, tak vytvořím pole s pamětí na N + 1 pointerů na char.
Pak zkopíruju pointery včetně R[0][0] do nového pole, abych je nemusel alokovat znovu
for (i = 0; i < m; i++) {
Ret[i] = R[i];
}
Poté naalokuju ten nový řádek
Ret[m] = (char*)malloc(2 * sizeof(char));
A do něj přidám hodnotu.
Ještě zvýším počet v R[0][0] o jeden
Ret[0][0] = m;
A mělo by to jet. ... A do 11ti prvků to taky jede a pak to bohužel spadne.
Každopádně už jsem to napsal jinak, ať mi to aspoň funguje a né přímo podle zadání a zítra o tom hodím řeč s učitelem. Takže díky za pomoc. ;-).
Potřebuju mít něco, co uchová max 20 prvků, takže 127 stačí. Ale když to dělám takhle, tak jich uchovám kolem 15ti a to ještě ve všech podobných polích a potřebuju 4.
Tady přikládám celý zdroják, který jsem zatím napsal.
#include <stdio.h>
#include <stdlib.h>
char** PridatPrvek(char **R, char a, char b) {
char **Ret;
if (R[0][0] > 0) {
int i;
int m = R[0][0] + 1;
Ret = (char**)malloc(m * sizeof(char*));
for (i = 0; i < m; i++) {
Ret[i] = R[i];
}
Ret[0][0] = m;
Ret[m] = (char*)malloc(2 * sizeof(char));
Ret[m][0] = a;
Ret[m][1] = b;
} else {
Ret = (char**)malloc(sizeof(char*));
Ret[0] = (char*)malloc(2 * sizeof(char));
Ret[1] = (char*)malloc(2 * sizeof(char));
Ret[0][0] = 1;
Ret[1][0] = a;
Ret[1][1] = b;
}
return(Ret);
}
int ObsahujePrvek(char **R, char a, char b) {
if (R[0][0] > 0) {
int i;
for (i = 1; i <= R[0][0]; i++) {
if (R[i][0] == a && R[i][1] == b)
return(1);
}
}
return(0);
}
void VypsatRelaci(char **R) {
if (R[0][0] > 0) {
int i;
printf("{");
for (i = 1; i <= R[0][0]; i++) {
printf("(%d, %d), ", R[i][0], R[i][1]);
}
printf("}");
}
}
int main()
{
char **R;
char **Ref;
char **Sym;
char **Tra;
R = (char**)malloc(sizeof(char*));
R = PridatPrvek(R, 0, 2);
R = PridatPrvek(R, 1, 2);
R = PridatPrvek(R, 2, 0);
R = PridatPrvek(R, 2, 2);
R = PridatPrvek(R, 2, 4);
R = PridatPrvek(R, 2, 2);
R = PridatPrvek(R, 2, 4);
R = PridatPrvek(R, 2, 2);
R = PridatPrvek(R, 2, 4);
R = PridatPrvek(R, 2, 2);
R = PridatPrvek(R, 2, 4);
R = PridatPrvek(R, 2, 4);
//printf("%d", ObsahujePrvek(R, 1, 2));
VypsatRelaci(R);
return 0;
}
Bych to rád měl ve strukturách, ale bohužel musím dodržet dynamické dvourozměrné pole.
Chybka se vloudila. Ten PocetR je z kódu co jsem zkusil psát potom, že jsem neměl počet v R[0][0], ale v externí proměnné. Problém ale byl stejný, až na to, že to hodilo chybu až po 16ti prvcích. Proto si myslím, že to bude nějak omezené pamětí.
Díky za odpovědi. Mají to být prvky z relace.
Teď jsem ale narazil na další problém.
Takhle vypadá f-ce na přidávání prvku do pole. Hodnota [0][0] slouží jako počet řádků, takže prvky relace jsou od 1. Funguje to tak, že f-ce založí nové pole větší o jeden řádek a vrátí na ni pointer.
char** PridatPrvek(char **R, char a, char b) {
char **Ret;
if (R[0][0] > 0) {
int i;
int m = R[0][0] + 1;
Ret = (char**)malloc(m * sizeof(char*));
for (i = 0; i < m; i++) {
Ret[i] = R[i];
}
Ret[0][0] = m;
Ret[m] = (char*)malloc(2 * sizeof(char));
Ret[m][0] = a;
Ret[m][1] = b;
} else {
Ret = (char**)malloc(sizeof(char*));
Ret[0] = (char*)malloc(2 * sizeof(char));
Ret[1] = (char*)malloc(2 * sizeof(char));
Ret[0][0] = 1;
Ret[1][0] = a;
Ret[1][1] = b;
}
return(Ret);
}
Takže při přidávání to vypadá nějak takhle
char **R;
R = (char**)malloc(sizeof(char*));
R = PridatPrvekR(R, 0, 2);
Jenže u cca 12ti prvků to hodí chybu za běhu. Když chci vytvořit to nové pole Ret
Ret = (char**)malloc(PocetR * sizeof(char*));
Jako kdyby byla nějak omezená paměť na alokaci.
Nevíte co s tím? Díky za odpovědi.
Ahoj. Mám pole v C, které je definováno takhle
R = (char**)malloc(o * sizeof(char *));
for (i = 0; i < o; i++) {
R[i] = (char*)malloc(2 * sizeof(char));
}
Je to dvourozměrné pole o rozměrech N x 2.
Potřebuju zjistit ve funkci, do které posílám pointer na to pole jako parametr, kolik má řádků, tedy N.
Když se to snažím počítat přes sizeof či podobně, tak mi to nikdy nevychází.
Díky za odpověď.
čaute ;) nainstalovala jsem si sindicate;) akorát když to spustím nebo-li se chci přihlásit hlásí mi to client.bon-součást nelze najít Aplikace nemohla být spuštěna,protože součást DevIl.dll nelze najít.Potíže pravděpodobně odtraníte opětovnou instalací aplikace.Co s tím mám teďka dělat?proč to nejde? :(
Zdravím mám takový problém s instalací Metina :) Stáhl jsem si clienta a pak laucher podle návodu,ale laucher se mi nechce spustit hlásí mi to furt laucher(2).exe-NET.framework Initialization error unable to find a version of the runtime to run this application..čím to je? Snažím se to stáhnout už dva dny na jakých kolik stránkách,ale buď to nejde nebo to hlásí furt tohle :( pls poraďte