On Sun, 30 Jan 2011 06:26:59 -0800 (PST)
cemalettin kara <[email protected]> wrote:
> merhabalar,
> c++ bilgilerimi tazelemek için thinking c++ kitabını okuyorum. ikinci
> ünitenin sonundaki uygulamaları yaparken. parçalama arızası hatası
> aldım. kitaptaki kodları yazdıp çalıştırdığımda ise programlar düzgün
> çalışmadı. programların kaynak kodları ekte. gdb ile aldığım çıktı şu
> şekilde: (gdb) run Starting program: /home/ceka/oyunAlanı/c+
> +_deneme/a.out
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x00007ffff7b64bf3 in std::basic_ostream<char, std::char_traits<char>
> >& std::operator<< <char, std::char_traits<char>,
> >std::allocator<char> >(std::basic_ostream<char,
> >std::char_traits<char> >&, std::basic_string<char,
> >std::char_traits<char>, std::allocator<char> > const&) ()
> >from /usr/lib/libstdc++.so.6
düzgün debug çıktısı almak için glibc-dbginfo paketini kurmanız lazım.
Ayrıca derlediğiniz programın flag larına en azından -g eklemeniz iyi
olur.
> pardus 2011 64bit kullanıyorum. neden olabilir acaba?
>
> [satiryazdir.cpp application/octet-stream (376B)]
Ben de aynı sürümü kullanıyorum, bu dosyada bir sorun çıkmadı, sizde
çöken biraz daha farklı olmalı, ama tahminim sorun aşağıdaki ile aynı.
> [satiryazdir2.cpp application/octet-stream (483B)]
> //bir dosyanın içerğini tersten yazdıran uygulama
> //yazan:Cemalettin KAra
>
> #include<iostream>
> #include<fstream>
> #include<string>
> #include<vector>
> using namespace std;
>
> int main() {
> ifstream in("daireAlani.cpp"); //istenen dosyanın açılmasının
> sağlıyoruz int sayac=0;
> string line;
>
> vector<string> l;
burada bir array açılıyor
> while(getline(in, line)) {
> l.push_back(line);
> sayac++;
> }
burada daireAlani.cpp nin satir adedi örneğin 42 ise döngü bitiminde
sayac = 42
l[] ye de tüm satırlar ekleniyor, ancak...
> for(int i=sayac; i>=0; i--) {
> cout << i << " " << l[i] << endl;
burada l[42] bastırmaya çalışıyorsunuz, ama array tipi değerleri 0 dan
almaya başlar, yani daireAlani.cpp dosyasının ilk satırı "armut" son
satırı "elma" ise
l[0] = "armut"
l[41] = "elma"
olur, l[42] de tanımsız olur çünkü içine bir veri konmamıştır.
Tanımsız bir hafıza alanına erişmeye çalıştığınız için de segfault
alıyorsunuz.
> }
> return 0;
> }
--
Onur Küçük Knowledge speaks,
<onur.--.-.delipenguen.net> but wisdom listens
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php