Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Мусор в памяти


Автор: Wolf1994 22.3.2009, 15:49
Почему при создании одномерного массива int  внутри функции в нём с самого начала присутствует мусор, то есть элементы массива содержат значения отличные от 0?

Есть ли какой-либо способ очистки созданного массива или создания чистого массива?

Автор: mes 22.3.2009, 15:55
Код

int mas [1000]= {0};

Автор: _GRIN_ 22.3.2009, 15:58
Смотря как ты создаёшь массив int - если он глобальный, то будет забит нулями, если не глобальный, то содержимое памяти (выделенное под массив) не будет обнулено при создании (правило общее для C и для C++)
конкретнее вот пример - скомпиль и проверь:
Код

#include <stdio.h>
int global_array[10]; //данный массив забит нулями (жёсткое правило языка - обязательно для всех компиляторов)
int main()
{
    int local_array[10]; //данный массив (по правилам языка) не обязан быть обнулён - а вот будет обнулён или нет - зависит от компилятора
    for(int i=0;i<10;i++) printf("global_array[%i] = %i; \t local_array[%i] = %i\n",i,global_array[i],i,local_array[i]);
    return 0;
}

Автор: zim22 22.3.2009, 16:00
Wolf1994, очистить так:
Код

int a[100] = {0};


Цитата(Wolf1994 @  22.3.2009,  15:49 Найти цитируемый пост)
Почему при создании одномерного массива int  внутри функции в нём с самого начала присутствует мусор

потому что массив объявлен в локальной области видимости, а не в глобальной. А по Стандарту переменные встроенных типов, объявленные в локальной области видимости не инициализируются. В отличии от объявленных в глобальной области видимости.

Автор: Dmi3ev 22.3.2009, 16:18
тоже вариант...
Код

int mas[10];
memset(mas, 0, sizeof(mas));

Автор: Wolf1994 22.3.2009, 18:56
Спасибо за ответы!

Автор: ilyuha 22.3.2009, 20:25
Цитата(zim22 @  22.3.2009,  16:00 Найти цитируемый пост)
 А по Стандарту переменные встроенных типов, объявленные в локальной области видимости не инициализируются

маленькое уточнение: статические локальные - инициализируются smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)