LINUX.ORG.RU

не понял что написал на c++

 


0

1

уважаемые специалисты, подскажите пожалуйста откуда в last->next берутся нули? я уже все убрал что можно, но нули не уходят.

#include <iostream>

class foo{
public:
int data;
foo *next;
};

int main(int argc, char *argv[]){
foo *head=NULL;
foo *last=NULL;
foo *current;
int i;
foo m;
m.next=&m;
foo *tmp;
std::cin>>i;
while(i--){
    current=new foo; current->data=i; 
         if(last==NULL && head==NULL){
            last=current; head=current;  
}
else{
   last->next=current; last=current;}
   std::cout << last->next << 
   "\t";}// вот тут last-> next, я убрал везде NULL, где можно и 
   где нельзя. откуда они тут?
}
 

tmp=head;
while(tmp){
     std::cout << tmp->data; tmp=tmp->next;
}



return 0;
}



Последнее исправление: linuxpc (всего исправлений: 2)

Ответ на: комментарий от symon2014

ребята, откуда zero? тут как бы не должно быть. помогите разобраться

linuxpc
() автор топика
Ответ на: комментарий от mky

это старая школа говнокодеров, в которой я обучался . всем что Вы видите, я обязан ей

linuxpc
() автор топика
Ответ на: комментарий от fornlr

отладчиком тоже надо уметь пользоваться. я не умею.

ну вот на Ваш взгляд, откуда там нули?

linuxpc
() автор топика
Ответ на: комментарий от legolegs

и? там тогда должен быть какой-то мусор, который каждый раз должен меняться. а а тут закономерно нуль всегда

linuxpc
() автор топика
Ответ на: комментарий от Deleted

как по мне,так вы также являетесь гугу программирования. и мне Ваша помощь бы не помешала в этом вопросе

linuxpc
() автор топика
Ответ на: комментарий от legolegs

к стати, я это сделал специально, чтобы понять откуда ноги растут. если бы я инициализировал next=NULL то объяснение было бы сразу и оно было бы неверным. потому как null берется откуда-то не оттуда

linuxpc
() автор топика

Вы не указали свой конструктор, поэтому используется конструктор по умолчанию, который и инициализировал поля класса.

anonymous
()

Ну что за мудачество? Выкладываешь код с просьбой помочь, имей совесть его нормально отформатировать. Я за бан.

WitcherGeralt ★★
()
Ответ на: комментарий от linuxpc

Мусор там может быть только ваш, а не постороннего процесса. ИМХО, в таком коде foo будет в памяти первым, после зануления страницы ядром.

Ну и в сторону конструктора по умолчанию:

https://stackoverflow.com/questions/2417065/does-the-default-constructor-init...

mky ★★★★★
()

А никто не гарантирует, что мусор не будет нулями. Всё в порядке. Proof. А конструктор по умолчанию здесь ничего не инициализирует, если вызывать без скобочек в new-выражении.

xaizek ★★★★★
()
Ответ на: комментарий от linuxpc

К сожалению, мусор, особенно в начале работа программы, часто является нулями. Это сбивает новичков.

Допиши в начале main

    const int SIZE = 1024;
    int *  bar = new int[SIZE];
    for (int i=0;i<SIZE;++i)
        bar[i]=i;
    delete[] bar;

и твоя программа станет падать или выдавать дичь в зависимости от значения SIZE. У меня на 512 выдёт мусор, а на 1024 вылетает, но это как повезёт.

legolegs ★★★★★
()
Ответ на: комментарий от Reineke

наверное потому что у Вас предчувствие развито....

linuxpc
() автор топика
Ответ на: комментарий от linuxpc

Исправь стартовое сообщение вместо извинений

Crocodoom ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.