<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem segmentation-fault</title>
<link>https://forum.pasja-informatyki.pl/tag/segmentation-fault</link>
<description>Powered by Question2Answer</description>
<item>
<title>Segmentation fault - jak znależć błąd</title>
<link>https://forum.pasja-informatyki.pl/561290/segmentation-fault-jak-znalezc-blad</link>
<description>

&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
using namespace std;


void stworzTablice (int **tab, int rozmiar)
{
    *tab = new int [rozmiar];
     for (int i=0; i&amp;lt;rozmiar; i++) {
        *(tab[i]) = 100;
    }
    return;
}

void usunTablice (int **tab);
{
    delete[] *tab;
    return;
}

int main()
{
    int size=100;
    int *tablica=nullptr;
    stworzTablice(&amp;amp;tablica, size);

    usunTablice(&amp;amp;tablica);

    cout &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;Cześć, ćwiczę wskaźniki i próbuję utworzyć dynamiczną tablicę.&lt;/p&gt;



&lt;p&gt;Program się nie wykonuje, a po analizie za pomocą debuggera wychodzi na to, że wywala segmentation fault w pętli for w funkcji stworzTablice przy próbie przypisania wartości dla tab[1] (chociaż wyżej została zaalokowana pamięć dla 100 elementów). Nie mam pojęcia, gdzie jest błąd.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/561290/segmentation-fault-jak-znalezc-blad</guid>
<pubDate>Thu, 17 Feb 2022 15:57:11 +0000</pubDate>
</item>
<item>
<title>SEG FAULT w wyznaczeniu maksymalnej sumy C++</title>
<link>https://forum.pasja-informatyki.pl/545681/seg-fault-w-wyznaczeniu-maksymalnej-sumy-c</link>
<description>

&lt;p&gt;Cześć,&lt;/p&gt;



&lt;p&gt;Na themisie mam zadanie, które przechodzi mi w 1 na 2 egzaminy, 2 wywala mi seg fault. Normalnie pddaję się już, nie wiem, o co chodzi.&lt;/p&gt;



&lt;p&gt;Treść zadania jest następująca:&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
Dla danej planszy liczb nieujemnych podaj maksymalną sumę liczb, jaką można zebrać idąc z lewego narożnika (na górze) do prawego (na dole) w taki sposób, że dozwolone są tylko ruchy w dół lub w prawo.

Wejście
W pierwszej linii wejścia dana jest liczba testów. Każdy test rozpoczyna się dwoma liczbami h, w (1 ≤ h, w ≤ 1000) zadającymi liczbę wierszy i kolumn planszy. Następnie dana jest plansza o tychże wymiarach wypełniona liczbami co do modułu nie większymi od miliona.

Wyjście
Dla każdego testu należy wypisać jedną liczbę – odpowiedź zgodną z opisem w zadaniu.

Przykład
Dla danych wejściowych

2

2 3
1 7 9
2 8 4

3 4
1 1 1 1
2 3 1 7
1 1 2 8
poprawną odpowiedzią jest
21
22&lt;/pre&gt;



&lt;p&gt;Po czy mój kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;bits/stdc++.h&amp;gt;
using namespace std;

struct TAB
{
    int val1, val2, vals, valt;
    int tab[1000];

};

int getSum(int BITree[], int index)
{
    int sum = 0;
    while (index &amp;gt; 0) {
        sum = max(sum, BITree[index]);
        index -= index &amp;amp; (-index);
    }
    return sum;
}

void updateBIT(int BITree[], int newIndex,
               int index, int val)
{
    while (index &amp;lt;= newIndex) {
        BITree[index] = max(val, BITree[index]);
        index += index &amp;amp; (-index);
    }
}

int maxSumIS(int arr[], int n)

{
    int newindex = 0, max_sum;

    map&amp;lt;int, int&amp;gt; uniqueArr;

    for (int i = 0; i &amp;lt; n; i++) {
        uniqueArr[arr[i]] = 0;
    }

    for (map&amp;lt;int, int&amp;gt;::iterator it = uniqueArr.begin();
         it != uniqueArr.end(); it++) {

        newindex++;

        uniqueArr[it-&amp;gt;first] = newindex;
    }


    int* BITree = new int[newindex + 1];

    for (int i = 0; i &amp;lt;= newindex; i++) {
        BITree[i] = 0;
    }

    for (int i = 0; i &amp;lt; n; i++) {
        max_sum = getSum(BITree, uniqueArr[arr[i]] - 1);

        updateBIT(BITree, newindex,
                 uniqueArr[arr[i]], max_sum + arr[i]);
    }

    return getSum(BITree, newindex);
}


int main()
{
    int num;
    cin &amp;gt;&amp;gt; num;
    if ((num&amp;lt;1) || (num &amp;gt; 1000))
    {
        return 0;
    }
    TAB stokrotki[num];
    for(int i = 0; i &amp;lt; num; i++)
    {
        cin &amp;gt;&amp;gt; stokrotki[i].val1;
        cin &amp;gt;&amp;gt; stokrotki[i].val2;
        stokrotki[i].vals = stokrotki[i].val1 * stokrotki[i].val2;
        stokrotki[i].valt = stokrotki[i].vals + 2;
        stokrotki[i].tab[0] = stokrotki[i].val1;
        stokrotki[i].tab[1] = stokrotki[i].val2;
        for(int j=2; j&amp;lt;stokrotki[i].valt; j++)
        {
            cin &amp;gt;&amp;gt; stokrotki[i].tab[j];
            if((stokrotki[i].tab[j] &amp;gt; 1000000))
            {
                return 0;
            }
        }

    }
    for(int i = 0; i &amp;lt; num; i++)
    {
        int arr[stokrotki[i].valt];
        for(int j=0; j&amp;lt;stokrotki[i].valt;j++)
        {
            arr[j] = stokrotki[i].tab[j];
        }
        int n = sizeof(arr) / sizeof(arr[0]);
        cout &amp;lt;&amp;lt; maxSumIS(arr, n) &amp;lt;&amp;lt; endl;
    }

    return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;No dla przykładu z zadania śmiga jak złoto - dla sprawdzianu 1 - złoto , ale sprawdzian 2 kicha.&lt;/p&gt;



&lt;p&gt;Czy ktoś byłby w stanie wykryć co zrobiłem nie tak i pokazać w którym miejscu należy poprawić?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/545681/seg-fault-w-wyznaczeniu-maksymalnej-sumy-c</guid>
<pubDate>Sun, 04 Jul 2021 19:01:56 +0000</pubDate>
</item>
<item>
<title>Funkcja malloc zgłasza segmentation fault ,gdy próbuję alokować prostą strukturę</title>
<link>https://forum.pasja-informatyki.pl/505462/funkcja-malloc-zglasza-segmentation-fault-gdy-probuje-alokowac-prosta-strukture</link>
<description>

&lt;p&gt;Witam. Musiałem zaprojektować prymitywną forward_list w języku C.Mam problem z następującym kodem, który reprezentuje:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
typedef struct q_node
{
   int key;
   struct q_node* next;
}q_node;

typedef struct queue
{
    size_t size;
    struct q_node* tail;
    struct q_node* head;
}queue;

q_node* make_node(int new_key)
{
   /* TUTAJ ZGŁASZA WYJĄTEK*/ q_node* new_node = malloc(sizeof (struct q_node));
    new_node-&amp;gt;key = new_key;
    new_node-&amp;gt;next = NULL;
    return new_node;
}

void queue_push_back(struct queue* queue,int new_key)
{
    //wywołuje funkcję make_node()
}&lt;/pre&gt;



&lt;p&gt;Problem polega na tym ,że funkcja malloc zgłasza wyjątek segmentation fault ,w funkcji make_node () ( sprawdzałęm w debugerze) . Ktoś wie dlaczego może tak być ? Z góry dziękuję za pomoc :D&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/505462/funkcja-malloc-zglasza-segmentation-fault-gdy-probuje-alokowac-prosta-strukture</guid>
<pubDate>Mon, 24 Aug 2020 16:14:05 +0000</pubDate>
</item>
<item>
<title>Podejrzenie błędu alokacji pamięci - język C - kod błędu 139 (segmentation fault).</title>
<link>https://forum.pasja-informatyki.pl/488913/podejrzenie-bledu-alokacji-pamieci-jezyk-c-kod-bledu-139-segmentation-fault</link>
<description>

&lt;p&gt;Dobry wieczór,&lt;/p&gt;



&lt;p&gt;mam pewien problem ze stworzeniem prostego programu, który oblicza sumę i średnią z wartości umieszczonych w tablicy. Kompilując program nie mam błędu, natomiast narzędzia do testów pokazują taki błąd:&amp;nbsp;Program&amp;nbsp;&lt;strong&gt;przerwany&lt;/strong&gt;; kod błędu=139 (Sygnał&amp;nbsp;SIGSEGV).&lt;/p&gt;



&lt;p&gt;To jest mój kod (działa dla małej ilości danych):&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

//int sum(const float* tab, unsigned int size, float *result);
//int avg(const float* tab, unsigned int size, float *result);
//int read_vector_float(float *vec, int size, float stop_value);

int i = 0;

int read_vector_float(float *vec, int size, float stop_value){
    printf(&quot;Podaj liczby: &quot;);
    if(size &amp;lt; 0 || size &amp;gt; 100){
        return -1;
    }
    for(i=0; i &amp;lt; size; i++){
        if(scanf(&quot;%f&quot;, &amp;amp;*vec) != 1){
            printf(&quot;Incorrect input&quot;);
            return -2;
        }
        if(*vec == stop_value) {
            break;
        }
        ++vec;
    }
    return i;
}

int sum(const float* tab, unsigned int size, float *result){
    if(size &amp;gt; 100){
        return 1;
    }
    for(int j=0; j &amp;lt; i; j++){
        *result = *result + *tab;
        ++tab;
    }
    return 0;
}

int avg(const float* tab, unsigned int size, float *result){

    double sum = 0;
    for(int j=0; j &amp;lt; (int)size; j++){
        sum += *tab;
        ++tab;
    }
    *result = (float)sum / (float)size;
    return 0;
}

int main() {


    float T[100] = {0};
    float *tPointer;
    tPointer = (float*)&amp;amp;T;
    float result = 0;
    float *pResult;
    pResult = (float*)&amp;amp;result;
    read_vector_float(tPointer, 100, 0);
    sum(tPointer, i, pResult);
    printf(&quot;Suma: %.2f\n&quot;, result);
    result = 0;
    avg(tPointer, i, pResult);
    printf(&quot;Srednia: %.2f\n&quot;, result);
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;Narzędzie do testowania funkcji avg wprowadza ogromną tablicę (niezwiązaną z moją tablicą T[100]), w polu size jest np. 1200 elementów. Mój kod nie posiada praktycznie żadnych zabezpieczeń wskazanych w poleceniu, ale to jeszcze przede mną. Chciałbym nauczyć się rozwiązywać problemy z dynamiczną alokacją pamięci, a tu jest moim zdaniem problem. Prawdopodobnie brakuje mi którejś z tych funkcji: malloc, calloc lub free. Czy mogę prosić o wskazówki? Męczę się z tematem już 5-6 godzin.&lt;/p&gt;



&lt;p&gt;Jako dodatek załączam fragment z oprogramowania do testowania:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Źródło błędu SIGSEGV wykryto w funkcji avg, plik main.c:45
Widok kodu źródłowego:



int avg(const float* tab, unsigned int size, float *result){

    double sum = 0;
    for(int j=0; j &amp;lt; (int)size; j++){
        sum += *tab;       //tutaj jest błąd
        ++tab;
    }
    *result = (float)sum / (float)size;
    return 0;&lt;/pre&gt;



&lt;p&gt;Z góry dziękuję za podpowiedzi.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/488913/podejrzenie-bledu-alokacji-pamieci-jezyk-c-kod-bledu-139-segmentation-fault</guid>
<pubDate>Sat, 16 May 2020 18:20:59 +0000</pubDate>
</item>
<item>
<title>Problem z seg.fault</title>
<link>https://forum.pasja-informatyki.pl/483593/problem-z-seg-fault</link>
<description>

&lt;p&gt;Dzień dobry.&lt;/p&gt;



&lt;p&gt;Mam pewien kod i tak jak w temacie spradzaczka pokazuje mi seg.fault.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include&amp;lt;vector&amp;gt;
#include&amp;lt;algorithm&amp;gt;
using namespace std;
int xd;

main()
{
    char macierz[10007][10007];
    int maks=0,n,m,a,b;
    vector &amp;lt;int&amp;gt; tab[100000];
    for(int i=0; i&amp;lt;10000;i++){
        for(int j=0;j&amp;lt;10000;j++){
            macierz[i][j]=0;}

    }
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
    for(int z=0;z&amp;lt;m;z++)
    {
        cin&amp;gt;&amp;gt;a&amp;gt;&amp;gt;b;

        macierz[a-1][b-1]=1;
        macierz[b-1][a-1]=1;
        tab[a].push_back(b);
        tab[b].push_back(a);
        if(a&amp;gt;maks)
        {
            maks=a;
        }
        if(b&amp;gt;maks)
        {
            maks=b;
        }
    }
    cout &amp;lt;&amp;lt; endl;
    cout&amp;lt;&amp;lt;&quot;Macierz:&quot;&amp;lt;&amp;lt;endl;
    for(int i=0;i&amp;lt;maks;i++)
    {
        for(int j=0;j&amp;lt;maks;j++)
        {
            cout&amp;lt;&amp;lt;static_cast&amp;lt;int&amp;gt;(macierz[i][j])&amp;lt;&amp;lt; &quot; &quot;;
        }
        cout&amp;lt;&amp;lt;endl;
    }

    cout&amp;lt;&amp;lt;endl;
    cout&amp;lt;&amp;lt;&quot;Lista;&quot;&amp;lt;&amp;lt;endl;
    for (int i=1;i&amp;lt;=n;i++)
    {
        sort(tab[i].begin(),tab[i].end());
        cout &amp;lt;&amp;lt;i&amp;lt;&amp;lt;&quot;:&quot;&amp;lt;&amp;lt;&quot; &quot;;
        for (int x=0; x&amp;lt;tab[i].size(); x++)
        {
            if(tab[i][x]==tab[i][x+1])
            {
                i=i;
            }
            else
                cout&amp;lt;&amp;lt;tab[i][x]&amp;lt;&amp;lt;&quot; &quot;;
        }
        cout&amp;lt;&amp;lt;endl;
    }

}
&lt;/pre&gt;



&lt;p&gt;Dlaczego?&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/483593/problem-z-seg-fault</guid>
<pubDate>Tue, 21 Apr 2020 13:20:49 +0000</pubDate>
</item>
<item>
<title>[C] Segmentation fault</title>
<link>https://forum.pasja-informatyki.pl/481010/c-segmentation-fault</link>
<description>Hej, właśnie skończyłem program który generuje system &lt;br /&gt;
&lt;br /&gt;
i dostaje oczekiwany efekt &amp;nbsp;ale pojawia się Segmentation Fault i nie mogę się go pozbyć. Może ktoś z was znajdzie przyczynę :D</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/481010/c-segmentation-fault</guid>
<pubDate>Wed, 08 Apr 2020 19:44:04 +0000</pubDate>
</item>
<item>
<title>Segmentation fault</title>
<link>https://forum.pasja-informatyki.pl/475979/segmentation-fault</link>
<description>

&lt;p&gt;Uczę się asemblera x86 w środowisku Linux. Napisałem prosty program jednak zwraca on segmentation fault. Już za długo szukam miejsca gdzie odwołuję się do nieprzydzielonej pamięci dlatego proszę Was o pomoc.
&lt;br&gt;

&lt;br&gt;
Program szuka największej liczby
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;

.section data.

data_items:
.long 3,67,34,222,45,76,45,43,444,99,0

.section .text
.globl _start
_start:
movl $0, %edi
movl data_items(,%edi,4), %eax # przy wykonywaniu tego daje seg. fault-a
movl %eax, %ebx



start_loop:
cmpl $0, %eax
je loop_exit
incl %edi
movl data_items(,%edi,4), %eax
cmpl %ebx, %eax
jle start_loop
movl %eax, %ebx
jmp start_loop

loop_exit:

movl $1, %eax
int $0x80

&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Assembler</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/475979/segmentation-fault</guid>
<pubDate>Sun, 15 Mar 2020 18:43:48 +0000</pubDate>
</item>
<item>
<title>Segmentation fault - C++</title>
<link>https://forum.pasja-informatyki.pl/475432/segmentation-fault-c</link>
<description>

&lt;p&gt;Mam problem. Polega on na tym, że kiedy watrość zmiennej&amp;nbsp;&lt;em&gt;b&lt;/em&gt;&amp;nbsp;jest zbyt duża, wyskakuje błąd&amp;nbsp;&lt;span style=&quot;color:#ff0000&quot;&gt;exited, segmentation fault&lt;/span&gt;. Co ciekawe, błąd nie pojawia się przy liczbach mniejszych niż&amp;nbsp;259560 (debug) / 259564 (release). Watro dodać, że zmienna&amp;nbsp;&lt;em&gt;a&lt;/em&gt;&amp;nbsp;jest zawsze mniejsza od&amp;nbsp;&lt;em&gt;b&lt;/em&gt;. Oto mój kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;

using namespace std;

int oblicz_sume(int liczba)
    {
        int wynik=0;
        do
        {
            wynik=wynik+liczba%10;
            liczba=liczba/10;
        }while(liczba!=0);
    return wynik;
}
int main()
{
    int a, b;
    cin &amp;gt;&amp;gt; a &amp;gt;&amp;gt; b;
    int roz = b-a+1;
    int numer[roz];
    for(int i = a; i &amp;lt;= b; i++){
        numer[i-a] = i;
    }
    int suma[roz];
    string ctrl;
    for(int i = 0; i &amp;lt; roz; i++){
        suma [i] = oblicz_sume(numer[i]);
    }
    sort(suma, suma + roz);
    cout &amp;lt;&amp;lt; suma[roz-1];
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;Proszę o szybką pomoc.&lt;/strong&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/475432/segmentation-fault-c</guid>
<pubDate>Thu, 12 Mar 2020 16:12:56 +0000</pubDate>
</item>
<item>
<title>exited, segmentation fault - C++</title>
<link>https://forum.pasja-informatyki.pl/463161/exited-segmentation-fault-c</link>
<description>

&lt;p&gt;Mam problem. Mianowicie po wpisaniu wejścia wyskakuje mi błąd: exited, segmentation fault. Prawdopodobnie wynika on z tego, że funkcja wywołuje sama siebie, ale jakoś nie chce mi się w to wierzyć. Zależy mi na jak najszybszej odpowiedzi. Oto kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

long long int par(long int n){
    return 10 * par(n / 5) + (n % 5) * 2;
}

int main() {
  long int n;
  cin&amp;gt;&amp;gt;n;
  cout&amp;lt;&amp;lt;par(n);
  return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/463161/exited-segmentation-fault-c</guid>
<pubDate>Mon, 16 Dec 2019 21:40:10 +0000</pubDate>
</item>
<item>
<title>Alokacja pamięci,lista,segmentation fault</title>
<link>https://forum.pasja-informatyki.pl/460816/alokacja-pamieci-lista-segmentation-fault</link>
<description>

&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;intLinkedList.h&quot;

IntLinkedList::IntLinkedList()
{
	head=NULL;
	tail=NULL;
}

IntLinkedList::~IntLinkedList()
{
	isEmpty();
}

int IntLinkedList::size()
{
	int size=0;
	struct Element* temp = head;
	if(temp==NULL)
		return size;
    while (temp != tail) {
		head = temp-&amp;gt;next;
		size++;
	}

	return size;
}

int IntLinkedList::isEmpty()
{
	if(head==NULL)
		return 1;
	else
		return 0;
}

void IntLinkedList::print()
{	
	struct Element* temp = head;
	int size=0;
	while (temp != tail) {
		head = temp-&amp;gt;next;
		size++;}
	std::cout &amp;lt;&amp;lt; &quot;[&quot;;
    for(int i=0;i&amp;lt;size;i++){
        std::cout &amp;lt;&amp;lt; temp-&amp;gt;value;
        if(i&amp;lt;(size-1))
            std::cout &amp;lt;&amp;lt; &quot;,&quot;;
    }
        std::cout &amp;lt;&amp;lt; &quot;]\n&quot;;
}

void IntLinkedList::append(int val)
{
	struct Element* new_el= new struct Element;
	
	if (new_el==NULL){
		printf(&quot;Blad!\n&quot;);
		return;
	}
	
	
	new_el-&amp;gt;value=val;
	head-&amp;gt;next=NULL;
	
	if(head==NULL){
		head=new_el;
		
	}else{
		struct Element *temp=head;
		
		while(new_el-&amp;gt;next != NULL){	
		
			new_el=new_el-&amp;gt;next;
		}		
			temp-&amp;gt;next=NULL;
    }
}
&lt;/pre&gt;



&lt;p&gt;plik nagłówkowy&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#pragma once
#include &amp;lt;iostream&amp;gt;


struct Element{
    int value;
    struct Element *next;

};

class IntLinkedList{
    
private:
	struct Element* head;
	struct Element* tail;
public:
	IntLinkedList();
	~IntLinkedList();
	int size(); //funkcja zwracajaca rozmiar listy
	int isEmpty(); //funkcja sprawdzająca czy lista jest pusta czy nie
	void print(); // drukuje listę w postaci [w1, w2, w3]
	void append(int); //wstawia wartość na koniec listy
			
};&lt;/pre&gt;



&lt;p&gt;Mianowicie mam problem z rozwiązaniem problemu:
&lt;br&gt;
segmentation fault pojawia mi się przy wywołaniu funkcji append&lt;/p&gt;



&lt;p&gt;valgrind pokazuje:&lt;/p&gt;



&lt;p&gt;&quot;Invalid write of size 8
&lt;br&gt;
==323== &amp;nbsp; &amp;nbsp;at 0x108D0C: IntLinkedList::append(int)
&lt;br&gt;
.....
&lt;br&gt;
&amp;nbsp;HEAP SUMMARY:
&lt;br&gt;
==323== &amp;nbsp; &amp;nbsp; in use at exit: 16 bytes in 1 blocks
&lt;br&gt;
==323== &amp;nbsp; total heap usage: 3 allocs, 2 frees, 76,816 bytes allocated&lt;/p&gt;



&lt;p&gt;....&quot;
&lt;br&gt;

&lt;br&gt;
&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/460816/alokacja-pamieci-lista-segmentation-fault</guid>
<pubDate>Sun, 01 Dec 2019 02:15:19 +0000</pubDate>
</item>
<item>
<title>Segmentation fault, Debugger i dziwne zachowania.</title>
<link>https://forum.pasja-informatyki.pl/394447/segmentation-fault-debugger-i-dziwne-zachowania</link>
<description>

&lt;p&gt;Dzień dobry!&lt;/p&gt;



&lt;p&gt;Od kilku tygodni &quot;Użeram&quot; się z pewnym programem. Miał on za zadania wygenerować mapę na układzie współrzędnych kartezjański. Nie jest to ważne. Najistotniejsze jest to, że używa on bardzo często szybkiej alokacji i zwalniania pamięci. Program jest podzielony na ok. 7 plików, które nie służą tylko w celu generowania tej mapy. Znajomość tego kodu nie jest potrzebna (Najprawdopodobniej) do odpowiedzi na moje pytanie. Uwaga: w kodzie została użyta nie deklarowana wcześniej klasa szablonowa Vector&amp;lt;type&amp;gt; z typdefem&amp;nbsp;Vector2i jest&amp;nbsp;to klasa&amp;nbsp;posiadająca&amp;nbsp;po prostu dwie zmienne x i y typu całkowitego.&amp;nbsp;Wyślę główne segmenty:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
//GŁÓWNY PLIK GENERATORA
#ifndef MAP_H_INCLUDED
#define MAP_H_INCLUDED

#include &quot;Room.h&quot;
#include &amp;lt;time.h&amp;gt;

class Map
{
public:
    Room * rooms;

    void generateMap(unsigned short roomsNumber)
    {
        std::cout &amp;lt;&amp;lt; &quot;Prakwiecie&quot; &amp;lt;&amp;lt; std::endl;
        if(rooms)
            delete rooms;
        rooms = new Room[roomsNumber];
        rooms[0].setCoordinates(0, 0);

        std::cout &amp;lt;&amp;lt; &quot;Poprakwiecie&quot; &amp;lt;&amp;lt; std::endl;

        unsigned int * roomsToGenerate = new unsigned int[1];
        unsigned short numOfRoomsToGen = 1;
        roomsToGenerate[0] = 0;

        unsigned int id = 0;

        while(id &amp;lt; roomsNumber - 1)
        {
            unsigned int wasRoom;
            unsigned int crashShield;
            wasRoom = 0;
            crashShield = 0;

            SideVector possibleWays;
            possibleWays = checkNearby(rooms, roomsNumber, rooms[roomsToGenerate[0]]);

            std::cout &amp;lt;&amp;lt; &quot;Zakwiecie&quot; &amp;lt;&amp;lt; std::endl;

            do
            {
                std::cout &amp;lt;&amp;lt; &quot;Zasrokwiecie&quot; &amp;lt;&amp;lt; std::endl;
                //if(rand() % 3 == 1 &amp;amp;&amp;amp; id &amp;lt; roomsNumber - 1 &amp;amp;&amp;amp; !possibleWays.Up &amp;amp;&amp;amp; !isNotColliding(rooms, roomsNumber, rooms[roomsToGenerate[0]].coordinates + Vector2i(0, -1), Side::Down))
                if(id &amp;lt; roomsNumber - 1 &amp;amp;&amp;amp; !possibleWays.Up &amp;amp;&amp;amp; !isNotColliding(rooms, roomsNumber, rooms[roomsToGenerate[0]].coordinates + Vector2i(0, -1), Side::Down))
                {
                    rooms[roomsToGenerate[0]].addDoor(rooms + id + 1, Side::Up);
                    rooms[id + 1].addDoor(&amp;amp;rooms[roomsToGenerate[0]], Side::Down);

                    rooms[id + 1].setCoordinates(rooms[roomsToGenerate[0]].coordinates.x, rooms[roomsToGenerate[0]].coordinates.y - 1);

                    addNew(&amp;amp;roomsToGenerate, numOfRoomsToGen, id + 1);
                    numOfRoomsToGen++;

                    id++;
                    wasRoom++;
                    std::cout &amp;lt;&amp;lt; rooms[id].coordinates &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; numOfRoomsToGen &amp;lt;&amp;lt; std::endl;
                }

                std::cout &amp;lt;&amp;lt; &quot;Srodkwiecie&quot; &amp;lt;&amp;lt; std::endl;

                //if(rand() % 3 == 1 &amp;amp;&amp;amp; id &amp;lt; roomsNumber - 1 &amp;amp;&amp;amp; !possibleWays.Down &amp;amp;&amp;amp; !isNotColliding(rooms, roomsNumber, rooms[roomsToGenerate[0]].coordinates + Vector2i(0, 1), Side::Up))
                if(id &amp;lt; roomsNumber - 1 &amp;amp;&amp;amp; !possibleWays.Down &amp;amp;&amp;amp; !isNotColliding(rooms, roomsNumber, rooms[roomsToGenerate[0]].coordinates + Vector2i(0, 1), Side::Up))
                {
                    rooms[roomsToGenerate[0]].addDoor(rooms + id + 1, Side::Down);
                    rooms[id + 1].addDoor(&amp;amp;rooms[roomsToGenerate[0]], Side::Up);

                    rooms[id + 1].setCoordinates(rooms[roomsToGenerate[0]].coordinates.x, rooms[roomsToGenerate[0]].coordinates.y + 1);

                    addNew(&amp;amp;roomsToGenerate, numOfRoomsToGen, id + 1);
                    numOfRoomsToGen++;

                    id++;
                    wasRoom++;
                    std::cout &amp;lt;&amp;lt; rooms[id].coordinates &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; numOfRoomsToGen &amp;lt;&amp;lt; std::endl;
                }

                //if(rand() % 3 == 1 &amp;amp;&amp;amp; id &amp;lt; roomsNumber - 1 &amp;amp;&amp;amp; !possibleWays.Right &amp;amp;&amp;amp; !isNotColliding(rooms, roomsNumber, rooms[roomsToGenerate[0]].coordinates + Vector2i(1, 0), Side::Left))
                if(id &amp;lt; roomsNumber - 1 &amp;amp;&amp;amp; !possibleWays.Right &amp;amp;&amp;amp; !isNotColliding(rooms, roomsNumber, rooms[roomsToGenerate[0]].coordinates + Vector2i(1, 0), Side::Left))
                {
                    rooms[roomsToGenerate[0]].addDoor(rooms + id + 1, Side::Right);
                    rooms[id + 1].addDoor(&amp;amp;rooms[roomsToGenerate[0]], Side::Left);

                    rooms[id + 1].setCoordinates(rooms[roomsToGenerate[0]].coordinates.x + 1, rooms[roomsToGenerate[0]].coordinates.y);

                    addNew(&amp;amp;roomsToGenerate, numOfRoomsToGen, id + 1);
                    numOfRoomsToGen++;

                    wasRoom++;
                    id++;
                    std::cout &amp;lt;&amp;lt; rooms[id].coordinates &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; numOfRoomsToGen &amp;lt;&amp;lt; std::endl;
                }
                std::cout &amp;lt;&amp;lt; &quot;Drusrukwiecie&quot; &amp;lt;&amp;lt; std::endl;

                //if(rand() % 3 == 1 &amp;amp;&amp;amp; id &amp;lt; roomsNumber - 1 &amp;amp;&amp;amp; !possibleWays.Left &amp;amp;&amp;amp; !isNotColliding(rooms, roomsNumber, rooms[roomsToGenerate[0]].coordinates + Vector2i(-1, 0), Side::Right))
                if(id &amp;lt; roomsNumber - 1 &amp;amp;&amp;amp; !possibleWays.Left &amp;amp;&amp;amp; !isNotColliding(rooms, roomsNumber, rooms[roomsToGenerate[0]].coordinates + Vector2i(-1, 0), Side::Right))
                {
                    rooms[roomsToGenerate[0]].addDoor(rooms + id + 1, Side::Left);
                    rooms[id + 1].addDoor(&amp;amp;rooms[roomsToGenerate[0]], Side::Right);

                    rooms[id + 1].setCoordinates(rooms[roomsToGenerate[0]].coordinates.x - 1, rooms[roomsToGenerate[0]].coordinates.y);

                    addNew(&amp;amp;roomsToGenerate, numOfRoomsToGen, id + 1);
                    numOfRoomsToGen++;

                    wasRoom++;
                    id++;
                    std::cout &amp;lt;&amp;lt; rooms[id].coordinates &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; numOfRoomsToGen &amp;lt;&amp;lt; std::endl;
                }

                crashShield++;
                std::cout &amp;lt;&amp;lt; &quot;lol&quot; &amp;lt;&amp;lt; std::endl;
            }
            while(!wasRoom &amp;amp;&amp;amp; crashShield &amp;lt; 10 &amp;amp;&amp;amp; id &amp;lt; roomsNumber - 1);

                delFirst(&amp;amp;roomsToGenerate, numOfRoomsToGen);
                numOfRoomsToGen--;

                std::cout &amp;lt;&amp;lt; &quot;Kwiecie&quot; &amp;lt;&amp;lt; std::endl;
        }
        std::cout &amp;lt;&amp;lt; &quot;Pokwiecie&quot; &amp;lt;&amp;lt; std::endl;
        return;
    }

    ~Map()
    {
        delete rooms;
    }
};

#endif // MAP_H_INCLUDED&lt;/pre&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
//PLIK POKOJU
#ifndef ROOM_H_INCLUDED
#define ROOM_H_INCLUDED

#include &quot;Door.h&quot;

class Room
{
public:

    Door * doors;
    unsigned int doorsNumber = 0;
    Vector2i coordinates;

    Room() :coordinates(0, 0) {}

    Room(Door * cDoors, unsigned int cDorNum, Vector2i cCor) :coordinates(cCor), doorsNumber(cDorNum)
    {
        delete doors;
        doors = cDoors;
    }

    void addDoor(Room * fRoom, Side fSide)
    {
        Door * bDoors = new Door[doorsNumber + 1];

        for(unsigned int i = 0; i &amp;lt; doorsNumber; i++)
            bDoors[i] = doors[i];

        bDoors[doorsNumber] = Door(fRoom, fSide);
        delete doors;
        doors = bDoors;
        doorsNumber++;
    }

    void setCoordinates(int x, int y)
    {
        coordinates = Vector2i(x, y);
    }

    ~Room()
    {
        delete doors;
    }
};

bool isPosFree(Room fRoomsArray[], unsigned int fArrayLength, Vector2i fCoordinates)
{
    for(int i = 0; i &amp;lt; fArrayLength; i++)
        if(fRoomsArray[i].coordinates.x == fCoordinates.x &amp;amp;&amp;amp; fRoomsArray[i].coordinates.y == fCoordinates.y)
            return false;

    return true;
}

bool isDoorOnSide(Door fDoorArray[], unsigned int fDoorsNumber, Side fSide)
{
    for(int i = 0; i &amp;lt; fDoorsNumber; i++)
        if(fDoorArray[i].doorsSide == fSide)
            return true;

    return false;
}

SideVector checkNearby(Room fRoomsArray[], unsigned int fArrayLength, Room fRoom)
{
    SideVector sides;

    for(int i = 0; i &amp;lt; fArrayLength; i++)
    {
            if(!(isPosFree(fRoomsArray, fArrayLength, fRoom.coordinates + Vector2i( -1, 0))))
                sides.Up = true;

            if(!(isPosFree(fRoomsArray, fArrayLength, fRoom.coordinates + Vector2i(1, 0))))
                sides.Down = true;

            if(!(isPosFree(fRoomsArray, fArrayLength, fRoom.coordinates + Vector2i(0, 1))))
                sides.Right = true;

            if(!(isPosFree(fRoomsArray, fArrayLength, fRoom.coordinates + Vector2i(0, -1))))
                sides.Left = true;

        return sides;
    }
}

bool isNotColliding(Room fRoomsArray[], unsigned int fArrayLength, Vector2i cCor, Side exSide)
{
    bool Colliding = false;

    for(int i = 0; i &amp;lt; fArrayLength; i++)
    {
        if(exSide != Side::Up)
            if(!(isPosFree(fRoomsArray, fArrayLength, cCor + Vector2i(0, -1))))
                Colliding = true;

        if(exSide != Side::Down)
            if(!(isPosFree(fRoomsArray, fArrayLength, cCor + Vector2i(0, 1))))
                Colliding = true;

        if(exSide != Side::Right)
            if(!(isPosFree(fRoomsArray, fArrayLength, cCor + Vector2i(1, 0))))
                Colliding = true;

        if(exSide != Side::Left)
            if(!(isPosFree(fRoomsArray, fArrayLength, cCor + Vector2i(-1, 0))))
                Colliding = true;

        return Colliding;
    }
}

#endif // ROOM_H_INCLUDED
&lt;/pre&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
//PLIK DRZWI
#ifndef DOOR_H_INCLUDED
#define DOOR_H_INCLUDED

#include &quot;Room.h&quot;
#include &quot;SC.h&quot;

class Room;

class Door
{
public:
    Room * goalRoom;
    Side doorsSide;

    Door(Room * cGoalRoom, Side cDoorsSide) :goalRoom(cGoalRoom), doorsSide(cDoorsSide) {}
    Door() {}

    Room * getGoalRoom()
    {
        return goalRoom;
    }

    Room * getRoom()
    {
        return goalRoom;
    }
};

#endif // DOOR_H_INCLUDED
&lt;/pre&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
//KLASY I FUNKCJE POMOCNICZE
#ifndef SC_H_INCLUDED
#define SC_H_INCLUDED

#include &quot;SfmlBase.h&quot;
#include &amp;lt;ios&amp;gt;


enum Corner
{
    UR,
    UL,
    DR,
    DL,
};

enum Direction
{
    Left, Right, Up, Down
};

struct MovementDirection
{
    bool    Up = 0,
            Down = 0,
            Right = 0,
            Left = 0;
};

typedef Direction Side;
typedef MovementDirection SideVector;

std::ostream &amp;amp; operator&amp;lt;&amp;lt;(std::ostream &amp;amp; fStr, SideVector fVec)
{
    fStr &amp;lt;&amp;lt; &quot;Up = &quot;     &amp;lt;&amp;lt; std::boolalpha  &amp;lt;&amp;lt; fVec.Up    &amp;lt;&amp;lt; std::endl;
    fStr &amp;lt;&amp;lt; &quot;Down = &quot;   &amp;lt;&amp;lt; std::boolalpha  &amp;lt;&amp;lt; fVec.Down  &amp;lt;&amp;lt; std::endl;
    fStr &amp;lt;&amp;lt; &quot;Right = &quot;  &amp;lt;&amp;lt; std::boolalpha  &amp;lt;&amp;lt; fVec.Right &amp;lt;&amp;lt; std::endl;
    fStr &amp;lt;&amp;lt; &quot;Left = &quot;   &amp;lt;&amp;lt; std::boolalpha  &amp;lt;&amp;lt; fVec.Left  &amp;lt;&amp;lt; std::endl;
    return fStr;
}

std::ostream &amp;amp; operator &amp;lt;&amp;lt;(std::ostream &amp;amp; buffi, Vector2i coordinates)
{
    buffi &amp;lt;&amp;lt; &quot;(&quot;;
    buffi &amp;lt;&amp;lt; coordinates.x;
    buffi &amp;lt;&amp;lt; &quot;, &quot;;
    buffi &amp;lt;&amp;lt; coordinates.y;
    buffi &amp;lt;&amp;lt; &quot;)&quot;;

    return buffi;
}

template&amp;lt;class type&amp;gt;
void delFirst(type ** tab, unsigned short length)
{
    type * newTab = new type[length - 1];
    newTab = *tab + 1;
    *tab = newTab;
}

template&amp;lt;class type&amp;gt;
void addNew(type ** tab, unsigned short length, type added)
{
    type * newTab = new type[length + 1];
    newTab = *tab;
    newTab[length] = added;
    *tab = newTab;
}

#endif // SC_H_INCLUDED
&lt;/pre&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
//krótki plik. trochę nie ma sensu
#ifndef SFMLBASE_H_INCLUDED
#define SFMLBASE_H_INCLUDED

#include &amp;lt;SFML/Graphics.hpp&amp;gt;
#include &amp;lt;iostream&amp;gt;

using namespace sf;

#endif
&lt;/pre&gt;



&lt;p&gt;Problem jest taki, że gdy uruchamiam program samodzielnie zacina się po ok. 14 lub mniej rekurencjach w pliku z mapą, lecz kiedy uruchamiam go debuggerem to wtedy wykonuje się tyle razy ile sobie zażyczę, zwracając jedynie przy zamykaniu programu błąd &quot;Segmentation fault&quot;. Jest to dla mnie co najmniej dziwne więc proszę o pomoc.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/394447/segmentation-fault-debugger-i-dziwne-zachowania</guid>
<pubDate>Sun, 18 Nov 2018 12:43:43 +0000</pubDate>
</item>
<item>
<title>Segmentation fault - std::unordered_map&lt;std::string, T&gt;</title>
<link>https://forum.pasja-informatyki.pl/341076/segmentation-fault-std-unordered_map-std-string-t</link>
<description>

&lt;p&gt;Cześć widziałem parę podobnych, tematów, lecz wydaje mi się że u mnie jest problem złej organizacji projektu.&lt;/p&gt;



&lt;p&gt;Problem polega wyrzucenie wyjątka &quot;Segmentation fault&quot;, w momencie usuwania textury,&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Żeby nie zaciemniać:&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
int main(void)
{
    DisplayMenager &amp;amp;dispMngr = DisplayMenager::getInstance();
    dispMngr.startup({800, 600});
 (...)
    glfwTerminate();
    return 0;
}&lt;/pre&gt;



&lt;p&gt;Display menager jest singletonem (coś mi się wydaje że tutaj już pierwszy błąd popełniłem), robi startup operacji.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void DisplayMenager::startup(glm::vec2 wndSize)
{
    this-&amp;gt;width = wndSize.x;
    this-&amp;gt;height = wndSize.y;
    this-&amp;gt;init();
    this-&amp;gt;enableDebug();
    this-&amp;gt;prepare();
}


void DisplayMenager::prepare()
{
    //SETUP THE BLENDING MODE r-(1-a) g-(1-a) b-(1-a)
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_BLEND);
    this-&amp;gt;LoadResource();
}


void DisplayMenager::LoadResource()
{       
    std::shared_ptr&amp;lt;Shader&amp;gt; tempShader(new Shader(&quot;res/shaders/Basic.vert&quot;));
    this-&amp;gt;_rscMngr.Add&amp;lt;Shader&amp;gt;(&quot;BasicShader&quot;, tempShader);    
    std::shared_ptr&amp;lt;Texture&amp;gt; tempTexture(new Texture(&quot;res/point.png&quot;));
    this-&amp;gt;_rscMngr.Add&amp;lt;Texture&amp;gt;(&quot;point&quot;, tempTexture);  
}&lt;/pre&gt;



&lt;p&gt;Pole&amp;nbsp; this-&amp;gt;_rscMngr wyglada tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
class DisplayMenager
{
  private:

    DisplayMenager();
    DisplayMenager(DisplayMenager const &amp;amp;);
    void operator=(DisplayMenager const &amp;amp;);

     ResourceMenager &amp;amp;_rscMngr=ResourceMenager::getInstance();

    (...)


  public:
    static DisplayMenager &amp;amp;getInstance()
    {
        static DisplayMenager instance;
        return instance;
    }
};&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Sam ResourceMengaer również jest singletonem - zależało mi żeby mieć dostęp do wszystkich zasobów z każdego miejsca programu - tak wiem że nie jest to thread safe, ale na razie ni przychodzi mi nic innego do głowy, no może factory pattern ...&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
class ResourceMenager
{

private:
  std::unordered_map&amp;lt;std::string, std::shared_ptr&amp;lt;Shader&amp;gt;&amp;gt; Shaders;
  std::unordered_map&amp;lt;std::string, std::shared_ptr&amp;lt;Texture&amp;gt;&amp;gt; Textures;

  ResourceMenager() {}
  ResourceMenager(ResourceMenager const &amp;amp;) {}
  void operator=(ResourceMenager const &amp;amp;) {}

public:
  static ResourceMenager &amp;amp;getInstance()
  {
    static ResourceMenager instance;
    return instance;
  }
  ~ResourceMenager(){ 
  }
  template &amp;lt;typename T&amp;gt;
  void Add(const std::string &amp;amp;name, T &amp;amp;resource);

  template &amp;lt;typename T&amp;gt;
  void Add(const std::string &amp;amp;name, std::shared_ptr&amp;lt;T&amp;gt; resource);

  template &amp;lt;typename T&amp;gt;
  T getResource(const std::string &amp;amp;name);
};&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;oraz cześć cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
template &amp;lt;&amp;gt;
void ResourceMenager::Add&amp;lt;Texture&amp;gt;(const std::string &amp;amp;name, std::shared_ptr&amp;lt;Texture&amp;gt; resource){
    this-&amp;gt;Textures.emplace(name, resource);
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Segmentation fault wchodzi przy wychodzeniu z programu, przy wywoływaniu (niejawnie) metody clear na unordered_map,&amp;nbsp;&lt;/p&gt;



&lt;p&gt;i prowadzi do&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Texture::~Texture()
{
    glDeleteTextures(1, &amp;amp;(this-&amp;gt;_RendererID));
}
&lt;/pre&gt;



&lt;p&gt;Wygląda mi to na jakiś problem z wywłaszczaniem, bo gdy ResourceMenager jest w main() nic zlego sie nie dzieje.&lt;/p&gt;



&lt;p&gt;Wszystko generowane w cmake , a kompilowane :&lt;/p&gt;



&lt;p&gt;gcc (Rev1, Built by MSYS2 project) 7.3.0
&lt;br&gt;
Copyright (C) 2017 Free Software Foundation, Inc.
&lt;br&gt;
This is free software; see the source for copying conditions. &amp;nbsp;There is NO
&lt;br&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;/p&gt;



&lt;p&gt;Flagi:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
add_definitions(-DGLEW_STATIC)
add_definitions(-D_WIN32=1)
add_definitions(-Dfpermissive)
add_definitions(-Dj8)&lt;/pre&gt;



&lt;p&gt;Pozdrawiam.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/341076/segmentation-fault-std-unordered_map-std-string-t</guid>
<pubDate>Fri, 06 Apr 2018 17:55:35 +0000</pubDate>
</item>
<item>
<title>Segmentation fault SPOJ</title>
<link>https://forum.pasja-informatyki.pl/335059/segmentation-fault-spoj</link>
<description>

&lt;p&gt;Witam, po próbie dodania rozwiązania do SPOJ-a, wyskoczył mi błąd o nazwie &quot;Segmentation fault&quot;. Byłby ktoś tak dobry i wytłumaczyłby mi co powinienem w kodzie zmienić/dopisać? Z góry dziękuję za odpowiedź, a poniżej kod ;)&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;
int a, suma, i;
int main() {
	int *tab = new int[i];
	suma = 0;
	for (i = 0; i &amp;gt; -1; i++)
	{
		cin &amp;gt;&amp;gt; a;
		tab[i] = suma;
		tab[i+1] = a;
		suma = tab[i] + tab[i+1];
		cout &amp;lt;&amp;lt; suma &amp;lt;&amp;lt; endl;
}

       delete[] tab;
	return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/335059/segmentation-fault-spoj</guid>
<pubDate>Fri, 16 Mar 2018 17:01:19 +0000</pubDate>
</item>
<item>
<title>Segmentation fault w gcc na linuksie, który nie występuje w eclipse na windowsie.</title>
<link>https://forum.pasja-informatyki.pl/308297/segmentation-fault-w-gcc-na-linuksie-ktory-nie-wystepuje-w-eclipse-na-windowsie</link>
<description>

&lt;p&gt;Witam, jako że to mój pierwszy post chciałbym pozdrowić wszystkich użytkowników forum :)&amp;nbsp;Postanowiłem ostatnio przesiąść się na linuksa. Jako kompilatora używam gcc-7. Rozwiązywałem zadanie ze SPOJ'a&amp;nbsp;&lt;a href=&quot;http://pl.spoj.com/problems/FLAMASTE/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Flamaster&lt;/a&gt;. Napisałem taki oto kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include&amp;lt;stdio.h&amp;gt;

int main(){
    int a,b,c,n;
    char wyraz[200], wyraz2[200];
    scanf(&quot;%d&quot;, &amp;amp;n);
    for(int i=0; i&amp;lt;n; i++){
        scanf(&quot;%s&quot;, wyraz);
        a=b=c=0;
        while(wyraz[a]!='\n'){
            b=0;
            wyraz2[c]=wyraz[a];
            a++; c++;
            while(wyraz[a-1]==wyraz[a]){
                b++; a++;
            }
            if(b==1) {wyraz2[c]=wyraz[a-1]; c++;}
            else if(b&amp;gt;=2) {wyraz2[c]=b+'0'; c++;}
        }
        wyraz2[c]='\n';
        printf(&quot;%s&quot;, wyraz2);        
    }
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;Wiem,&amp;nbsp;że zapis&lt;/p&gt;



&lt;blockquote&gt;


&lt;p&gt;wyraz2[c]=b+'0';&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;będzie działał tylko dla b z zakresu 0-9, ale większe numery zaimplementuje później. Szukałem błędu przez około 2 godziny, aż wysłałem kod koledze, który odesłał mi screena i powiedział, że u niego program działa bez problemu. Używa on Eclipse i Mingw. Nie wiem, czy powinienem używać innego kompilatora na linuksie? Czy popełniam gdzieś błąd?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/308297/segmentation-fault-w-gcc-na-linuksie-ktory-nie-wystepuje-w-eclipse-na-windowsie</guid>
<pubDate>Sun, 03 Dec 2017 03:12:38 +0000</pubDate>
</item>
<item>
<title>OpenGL i SFML - segmentation fault.</title>
<link>https://forum.pasja-informatyki.pl/237437/opengl-i-sfml-segmentation-fault</link>
<description>

&lt;p&gt;Witam!&lt;/p&gt;



&lt;p&gt;Napisałem program, który ma wyświetlić na ekranie biały trójkąt. Kompilator i linker nie wywala żadnych warningów ani errorów. Jednak po uruchomieniu program się wylewa (segmentation fault).&lt;/p&gt;



&lt;p&gt;Oto mój kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;GL/glew.h&amp;gt;
#include &amp;lt;SFML/Window.hpp&amp;gt;
#include &amp;lt;SFML/OpenGL.hpp&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;streambuf&amp;gt;
#include &amp;lt;fstream&amp;gt;

char* loadShaderFromFile(const std::string&amp;amp; filename);


int main(void)
{
    glewInit();

    sf::ContextSettings settings;
    settings.depthBits = 24;
    settings.stencilBits = 8;
    settings.antialiasingLevel = 4;
    settings.majorVersion = 3;
    settings.minorVersion = 2;

    // create the window
    sf::Window window(sf::VideoMode(800, 600), &quot;OpenGL&quot;, sf::Style::Default, settings);
    window.setVerticalSyncEnabled(true);
    window.setActive(true);

    float vertices[] = {
     0.0f,  0.5f, // Vertex 1 (X, Y)
     0.5f, -0.5f, // Vertex 2 (X, Y)
    -0.5f, -0.5f  // Vertex 3 (X, Y)
    };

    GLuint vbo;
    glGenBuffers(1, &amp;amp;vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    
    GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);
    GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER);
    char* vertSource = loadShaderFromFile(&quot;vshader.vert&quot;);
    char* fragSource = loadShaderFromFile(&quot;fshader.frag&quot;);
    glShaderSource(vertShader, 1, &amp;amp;vertSource, NULL);
    glShaderSource(fragShader, 1, &amp;amp;fragSource, NULL);
    GLint status;
    glCompileShader(vertShader);
    glGetShaderiv(vertShader, GL_COMPILE_STATUS, &amp;amp;status);
    if(status!=GL_TRUE) 
    {
        puts(&quot;Shader compilation error!&quot;);
        return -1;
    }
    glCompileShader(fragShader);
    glGetShaderiv(fragShader, GL_COMPILE_STATUS, &amp;amp;status);
    if(status!=GL_TRUE) 
    {
        puts(&quot;Shader compilation error!&quot;);
        return -1;
    }

    GLuint shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertShader);
    glAttachShader(shaderProgram, fragShader);

    glBindFragDataLocation(shaderProgram, 0, &quot;outColor&quot;);

    glLinkProgram(shaderProgram);
    glUseProgram(shaderProgram);

    GLint posAttrib = glGetAttribLocation(shaderProgram, &quot;position&quot;);
    glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(posAttrib);

    GLuint vao;
    glGenVertexArrays(1, &amp;amp;vao);
    glBindVertexArray(vao);


    bool running = true;
    while (running)
    {
        
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                // end the program
                running = false;
            }
            else if (event.type == sf::Event::Resized)
            {
                // adjust the viewport when the window is resized
                glViewport(0, 0, event.size.width, event.size.height);
            }
        }

        glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glDrawArrays(GL_TRIANGLES, 0, 3);

        window.display();
    }


    return 0;
}

char* loadShaderFromFile(const std::string&amp;amp; filename)
{
    std::ifstream file(filename);
    std::string str((std::istreambuf_iterator&amp;lt;char&amp;gt;(file)),
                 std::istreambuf_iterator&amp;lt;char&amp;gt;());
    return (char*)str.c_str();
}&lt;/pre&gt;



&lt;p&gt;Kompiluję na linuxsie Mint 18. Tu jeszcze mój Makefile:&lt;/p&gt;



&lt;pre class=&quot;brush:bash;&quot;&gt;
CC=g++
CFLAGS= -std=c++11 -Wall -pedantic -g
LIBS= -lGLEW -lGLU -lGL -lsfml-graphics -lsfml-window -lsfml-system
OUTPUTFILE= out

all:
	$(CC) $(CFLAGS) main.cpp -o $(OUTPUTFILE) $(LIBS)&lt;/pre&gt;



&lt;p&gt;Z góry dziękuję za pomoc!&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/237437/opengl-i-sfml-segmentation-fault</guid>
<pubDate>Wed, 22 Mar 2017 10:08:08 +0000</pubDate>
</item>
<item>
<title>Usuwanie z listy, dlaczego &quot;segmentation fault&quot; ?</title>
<link>https://forum.pasja-informatyki.pl/234773/usuwanie-z-listy-dlaczego-segmentation-fault</link>
<description>

&lt;pre class=&quot;brush:plain;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
using namespace std;

struct node
{
    int val;
    node *next;
};
void add(node* &amp;amp;H, int x) //dodawanie nowego węzła
{
    node *p = new node;
    p-&amp;gt;val=x;
    p-&amp;gt;next=H;
    H=p;
}
void del(node* &amp;amp;H) //usuwanie
{
    node *p= new node;
    H=p-&amp;gt;next;
    delete p;
}
int main()
{
    node *H=NULL;
    add(H,8); // tutaj dodam sobie trzy węzły
    add(H,15);
    add(H,64);
    cout &amp;lt;&amp;lt; H-&amp;gt;val &amp;lt;&amp;lt; endl; // elegancko wyświetla &quot;64&quot;
    del(H);
    cout &amp;lt;&amp;lt; H-&amp;gt;val &amp;lt;&amp;lt; endl; // no i tutaj program się wysypuje ( żółta strzałka tutaj wskazuje ( Code Blocks ) )
    system(&quot;pause&quot;);
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;Witajcie&lt;/p&gt;



&lt;p&gt;Nie rozumiem pewnego problemu. Otóż wszystko się elegancko kompiluje, ale wyskakuje mi naruszenie ochrony pamięci. Czemu tak? Przecież, podstawiam pod H następny element z listy ( jest to H = p-&amp;gt; next ) a następnie zwalniam pamięć poprzez &quot;delete&quot;.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/234773/usuwanie-z-listy-dlaczego-segmentation-fault</guid>
<pubDate>Sun, 12 Mar 2017 13:20:56 +0000</pubDate>
</item>
<item>
<title>segmentation fault - problem z lokalizacją naruszenia pamięci</title>
<link>https://forum.pasja-informatyki.pl/227481/segmentation-fault-problem-z-lokalizacja-naruszenia-pamieci</link>
<description>

&lt;p&gt;Witam. Jak w temacie mam problem ze zlokalizowaniem błędu segmentation fault. Wiem tylko tyle, że debugger zatrzymuje mi się w linii oznaczonej &quot;►&quot;. Wrzuciłem tylko część kodu w której występuje błąd wszystko co potrzebne jest zawarte w tej części powyżej jest tylko ściągnięcie pewnych danych (część mało istotna nie sprawiająca problemu). Będę wdzięczny za każdą pomoc.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
fstream dopis (nazwa.c_str(), ios_base::app);
        string nazwa_zakupionego;
        string cena;
        char pomoc;
        string tmp_str;                                     //tmp_str string powstający w celu zczytania interesujacej nas czesci ceny
        int cena_zl=0, cena_gr=0, dlugosc=0, j=0, tmp=0;    //tmp licba do funkcji atoi w celu zamiany stringa ceny na inta
        cout&amp;lt;&amp;lt;&quot;Podaj nazwę zakupionego przedmiotu:\n&quot;;
        cin&amp;gt;&amp;gt;nazwa_zakupionego;
        cout&amp;lt;&amp;lt;&quot;Podaj cenę:\n&quot;;
        cin&amp;gt;&amp;gt;cena;
        pomoc=cena[j];
        while (pomoc!='.'||pomoc!=',')
        {
            j++;
►           pomoc=cena[j];
        }
        tmp_str=cena[j+1]+cena[j+2];
        cena_gr = atoi(tmp_str.c_str());
        string tmp_string;
        while(tmp&amp;lt;j)
        {
            tmp_str=tmp_string+cena[j];
            tmp++;
        }
        cena_zl=atoi(tmp_string.c_str());
        dopis&amp;lt;&amp;lt;cena_zl&amp;lt;&amp;lt;&quot;.&quot;&amp;lt;&amp;lt;cena_gr&amp;lt;&amp;lt;&quot;\t&quot;&amp;lt;&amp;lt;nazwa_zakupionego&amp;lt;&amp;lt;&quot;;&quot;&amp;lt;&amp;lt;endl;
        dopis.close();&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/227481/segmentation-fault-problem-z-lokalizacja-naruszenia-pamieci</guid>
<pubDate>Thu, 16 Feb 2017 12:21:52 +0000</pubDate>
</item>
<item>
<title>Segmentation fault przy wczytywaniu z pliku do tablicy</title>
<link>https://forum.pasja-informatyki.pl/220709/segmentation-fault-przy-wczytywaniu-z-pliku-do-tablicy</link>
<description>

&lt;p&gt;Cześć,
&lt;br&gt;

&lt;br&gt;
muszę stworzyć w C program do obróbki obrazów w formacie PGM, który będzie je odczytywał z pliku do tablicy i wykonywał na nich różne operacje. Napisałem wszystkie funkcje do obróbki i funkcje odczytu z pliku i zapisu. Program kompiluje się poprawnie, ale przy próbie wczytania obrazu, po podaniu nazwy, kończy się błędem &quot;segmentation fault&quot;. Dodam, że kompilowałem za pomocą GCC na Linuksie.&lt;/p&gt;



&lt;p&gt;Funkcja i wywołanie wczytania wyglądają tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

#define MAX 512         // maksymalny rozmiar obrazu
#define DL_LINII 1024   // dlugosc buforow pomocniczych

// ODCZYT OBRAZU Z PLIKU DO TABLICY:
int czytaj (FILE *plik_wej, int obraz_pgm [][512], int *wymX, int *wymY, int *szarosci)
{
    char buff [DL_LINII];   // bufor pomocniczy
    int znak;               // zmienna pomocnicza
    int koniec;             // monitorowanie konca danych w pliku
    int i, j;

    // KONTROLA POPRAWNOSCI PLIKU:
    if (plik_wej == NULL)
    {
        fprintf (stderr, &quot;Blad: podany plik jest nieprawidlowy!\n&quot;);
        return 0;
    }

    // &quot;NUMER MAGICZNY&quot;:
    if (fgets (buff, DL_LINII, plik_wej) == NULL)   koniec = 1;     // wczytanie pierwsze linii z pliku
    if (buff [0] != 'P' || buff [1] != '2' || koniec)
    {
        fprintf (stderr, &quot;Blad: podany plik nie jest plikiem PGM!\n&quot;);
        return 0;
    }

    // POMIJANIE KOMENTARZY:
    do {
        if ((znak = fgetc(plik_wej)) == '#')
        {
            if (fgets(buff, DL_LINII, plik_wej) == NULL)    koniec=1;
            else    ungetc(znak, plik_wej);
        }
    } while (znak == '#' &amp;amp;&amp;amp; !koniec);

    // POBRANIE PARAMETROW OBRAZU:
    if (fscanf (plik_wej, &quot;%d %d %d&quot;, wymX, wymY, szarosci) != 3)
    {
        fprintf (stderr, &quot;Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n&quot;);
        return(0);
    }

    // ZAPISANIE OBRAZU W TABLICY:
    for (i=0; i&amp;lt;*wymY; i++)
    {
        for (j=0; j&amp;lt;*wymX; j++)
        {
            if (fscanf(plik_wej, &quot;%d &quot; ,&amp;amp;(obraz_pgm [i][j])) != 1)
            {
                fprintf (stderr, &quot;Blad: Niewlasciwe wymiary obrazu\n&quot;);
                return(0);
            }
        }
    }
    return *wymX * *wymY;
}

/************************************/

switch (Wybor)
    {
        // WCZYTANIE:
        case 1:     CzyWczytany = 0;
                    printf (&quot;Podaj nazwe pliku: &quot;);
                    scanf (&quot;%s&quot;, &amp;amp;nazwa_wej);
                    printf (&quot;%s&quot;, nazwa_wej);
                    plik = fopen (nazwa_wej, &quot;r&quot;);
                    if (czytaj (plik, obraz, &amp;amp;wymX, &amp;amp;wymY, &amp;amp;szarosci) != 0);
                    printf (&quot;Obraz wczytany pomyslnie\n&quot;);
                    CzyWczytany = 1;
                    fclose (plik);
                    break;

/**********************************/
&lt;/pre&gt;



&lt;p&gt;A gdyby to nie wystarczyło, to tak wygląda cały program: &amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://pastebin.com/WHKGVe4i&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://pastebin.com/WHKGVe4i&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Z góry wielkie dzięki za pomoc.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/220709/segmentation-fault-przy-wczytywaniu-z-pliku-do-tablicy</guid>
<pubDate>Fri, 27 Jan 2017 12:35:50 +0000</pubDate>
</item>
</channel>
</rss>