powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / По выделению массивов у меня получился Дельфи круче чем Си++ почему?
9 сообщений из 9, страница 1 из 1
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38044685
Bestuzhev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всегда программировал на дельфи. Сейчас пробую на Си++. Есть некоторое недоумение:
Получается, что на Дельфи могу выделять массивы большего размера чем на Си++. Почему?

код на дельфи выполняется без проблем

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
Var
     T0,T1,T2,T3:array of real;
     n:integer;
begin
     
     SetLength(T0,n);
     SetLength(T1,n);
     SetLength(T2,n);
     SetLength(T3,n);



попытка компиляции кода на С++

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
#include <stdio.h>
#include <iostream>
#include <fstream>


#define N 1000000
using namespace std;

int main( void ) {
	float a[N];
	



	for (int i=0; i<N; i++)
	{
		a[i]=15;
		
	}
	a[0]=-15;
	


	ofstream outfile;
	outfile.open("xxx.dat");



	for (int i=0; i<N; i++)
	{
	outfile << i*0.1 << " " << a[i] << endl;
	}

	outfile.close();


	
	

	
	int aaa;
	cin >> aaa;
	return 0;
}



приводит к ошибке

Unhandled exception at 0x0118c517 in pr1.exe: 0xC00000FD: Stack overflow.

причем на дельфи выделяются 4 массива по 1000000 элементов, а на си++ не может выделиться даже 1...??? При значениях N меньше миллиона, все выполняется без проблем. Подумал, что проблемы с количеством памяти, но у дельфи столько же свободной памяти в распоряжении...???

Наверное, не должно быть так все грустно у Си++. Подскажите, что делаю не так? Спасибо.
Компьютер тот же, оперативки столько же
...
Рейтинг: 0 / 0
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38044697
Bestuzhev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы не вводить в забуждение, оговорюсь, что n в дельфовом коде вводится пользователем, а не 0, как можно было бы подумать, так что ошибки тут нет, все работает.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
Var
     T0,T1,T2,T3:array of real;
     n:integer;
begin
     n:=strtoint(Edit1.text);
     SetLength(T0,n);
     SetLength(T1,n);
     SetLength(T2,n);
     SetLength(T3,n);
...
Рейтинг: 0 / 0
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38044699
...
Рейтинг: 0 / 0
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38044702
Bestuzhev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не очень пока силен в синтаксисе Си++. вектор - это класс? он может быть двух или трехмерным? Что он из себя представляет, массив? могу я передать указатель на него в функцию? спасибо.
...
Рейтинг: 0 / 0
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38044708
Bestuzhev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока на сколько понял, такое решение мне не подходит, поскольку вектор не сьютэйбл в дальнейшем с последующими функциями.
не понимаю, что за ограничение на размер массива, он ведь даже не динамический... глупость какая-то. :(
...
Рейтинг: 0 / 0
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38044711
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bestuzhev,

потому что есть разница между массивами, выделенными в куче и расположеными на стеке.
Приведенный вами Delphi код аналогичен следующему коду на С++:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
{
float *T0, *T1, *T2, *T3;
int n;
...
T0 = new float[n];
T1 = new float[n];
T2 = new float[n];
T3 = new float[n];
}


А приведенный вами С++ код аналогичен следующему коду на Delphi:
Код: pascal
1.
2.
const N = 1000000;
var a: array[0..N - 1] of real;


Попробуйте такое скомпилировать и запустить - тоже получите stack overflow.
...
Рейтинг: 0 / 0
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38045169
Bestuzhev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо огромное. Очень помогли. Все сработало как надо.
...
Рейтинг: 0 / 0
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38046354
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bestuzhev,

Дело не в языке программирования, а в размере стека, который компилятор по умолчанию делает.
Если мало, можеш задать явно сколько надо.
Если все равно мало, не создавай массив на стеке (класс памяти auto).
...
Рейтинг: 0 / 0
По выделению массивов у меня получился Дельфи круче чем Си++ почему?
    #38046362
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bestuzhevпока на сколько понял, такое решение мне не подходит, поскольку вектор не сьютэйбл в дальнейшем с последующими функциями.
не понимаю, что за ограничение на размер массива, он ведь даже не динамический... глупость какая-то. :(

Когда надо использовать вектор как массив , используется такая конструкция:

void foo( float * );
std::vector<float> v(57);
foo( &v[0]);
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / По выделению массивов у меня получился Дельфи круче чем Си++ почему?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]