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

Cevap