В чем ошибка?(с++)
а вообще, почему б тебе не опустить глаза и не посмотреть, на что ругается компилятор?
есть подозрение, что это все компилируется, а ошибка позже
да, именно так. . .
тогда почему бы не отдебаджить?
во время дебага все в порядке, только в конце просит указать какой-то путь. . .
Так что там дебажить, если там промах по памяти
а где именно. . .как исправить?
выделить больше места.
*pArr = nNumber;
pArr++;
Что это должно делать ?
какой промах? память под очередные пАрр не выделяется? И черт с ней, скорее всего, хоть и не гарантированно, все сработает
так вот она негарантированно и работает.
int* pArr = new int;Может, int* pArr = new int[сколько-нибудь]; ?
А то
pArr++;сразу же вылезает за пределы отведённой памяти (в размере одного int-а).
если я потом прошу мне выдать число под любым номером, которое захочу (если я его ввел) он выводит, а потом говорит об ошибке. . .
выводит потому, что ты его, все-таки, записал в нужное место. И считать, конечно, можешь. А ошибка - в том, что пытаешься работать с невыделенной памятью.
чем тогда отличаются
int* pArr = new int;
от
int* pArr;
?
в твоем случае только первым элементом ты выделил одну четверку байтов, а пытаешься работать с большим их количеством.
char* pChar = new char
я выделяю только под один char место?
нет, это указатель на строку неопределенной длины, размером до 4Гб. . .
да, под один
ничего подобного. Даже не понимаю, с чего тебе это в голову пришло.
char * pChar - это указатель не на строку, а на единственный байт. И оператором нью ты и выделяешь под него один байт.
так в чем тогда разница (см. выше) с new и без?
В первом случае выделяется память под один int, во втором вообще не выделяется.
Тебе нужно было (int*) new int[100], или вообще использовать malloc какой-нибудь.
а если я захочу выделить память для строки неопределенной длины, что делать?
поменять схему. Например, использовать CArray. Или массу других готовых классов и контейнеров.
А вместо *pArr = nNumber; pArr++; пиши v.push_back(nNumber)
Ботай STL короче, а вообще С по нормальному сначала выучи.
char* pChar = new char;
cout << "vvedite stroku \n";
cin >> pChar;
cout << pChar << "\n";
работает(правда с косяками, но работает а
char* pChar;
cout << "vvedite stroku \n";
cin >> pChar;
cout << pChar << "\n";
нет?
Короче, последуй совету Кома
Экспериментальное изучение C++
ок, косяк мой. . .
В первом случае ты выделяешь память под один символ, т.е. хоть памяти и маловато, но указатель по крайней мере инициализирован корректно и указывает в кучу, а во втором случае он указывает в любую точку неба. Доступ по этому указателю запрещается на уровне железа
Оставить комментарий
wizard42
#include "stdafx.h"#include <iostream.h>
#include <stdlib.h>
void null(char a[])
{
for(int i = 0; i < 10; i++)
{
a[i] = '\0';
}
}
void main
{
char cArr[10];
cout << "Введите числа: \n";
int nNumber = 0;
int nLength = 0;
int* pArr = new int;
null(cArr);
while(1)
{
cin.getline(cArr, 10);
if(cArr[0] = = ';')
break;
nLength++;
nNumber = atoi(cArr);
*pArr = nNumber;
pArr++;
null(cArr);
nNumber = 0;
}
}
? подскажите плз. . .