Переделываю программу для экономического календаря с VB на C++.NET
Все в порядке, но почему-то при отладке n не приравнивается list, а записывается вообще какой-то левый указатель на неизвестно что! Пробовал extern news* list прописывать. Ничего помогает =(
В чем ошибка?
Выделена паямять не под 50 струтктур, а под 50 указателей на структуры - sizeof(news*)*50. Если нужно разместить 50 структур, то тогда
news* list=(news*)malloc(sizeof(news)*50);
Успехов
Исправить пробовали ? Размерность указателя - это размерность инта для 32 разрядной архитектуры это 100 чаров. В данном случае 50 указателей это меньше, чем одна структура. То есть памяти будет отведено меньше, чем нужно для размещения даже одного элемента лист. Возможно потому мусор и сыпет...
Успехов.
В Вашем примере в а будет храниться адрес структуры лист. Значение можно получить 2-мя путями :
1. *а.имяполя
2. а->имяполя
То есть для доступа к значению указатель (адрес) нужно разименовать.
Исправить пробовали ? Размерность указателя - это размерность инта для 32 разрядной архитектуры это 100 чаров. В данном случае 50 указателей это меньше, чем одна структура. То есть памяти будет отведено меньше, чем нужно для размещения даже одного элемента лист. Возможно потому мусор и сыпет...
Успехов.
В Вашем примере в а будет храниться адрес структуры лист. Значение можно получить 2-мя путями :
1. *а.имяполя
2. а->имяполя
То есть для доступа к значению указатель (адрес) нужно разименовать.
Меня не интересует значение вообще. Исправлять нечего - в листинге память выделяется правильно(не на указатали, а на целую структуру). Меня интересует приравнивание указателя:
1. news* a; //Локальная
2. news* b; //Глобальная
3. a=b;
А дебаггер после выполнения третьей строчки показывает, что а не равно b.(скриншот выше). Первый раз с таким столкнулся..
#include <stdlib.h>
struct Employee {
char title [ 50 ] ;
int year;
} ;
int main ()
{
char buffer [ 50 ] ;
Employee aEmployee;
Employee * pEmployee;
pEmployee = & aEmployee;
cout << "Enter title: " ;
cin.getline ( pEmployee->title, 50 ) ;
cout << "Enter year: " ;
cin.getline ( buffer, 50 ) ;
pEmployee->year = atoi ( buffer ) ;
cout << "\nYou have entered:\n" ;
cout << pEmployee->title;
cout << " (" << pEmployee->year << ")\n" ;
return 0 ;
}
Короче заинтриговал, сейчас посмотрю.
Но обычно это синдром кривых рук, а не проблема C++.
Меня не интересует значение вообще. Исправлять нечего - в листинге память выделяется правильно(не на указатали, а на целую структуру). Меня интересует приравнивание указателя:
1. news* a; //Локальная
2. news* b; //Глобальная
3. a=b;
А дебаггер после выполнения третьей строчки показывает, что а не равно b.(скриншот выше). Первый раз с таким столкнулся..
Ошибку повторить не удалось :(
typedef struct news { char Symbol[5]; char Day[10]; char Text[1000]; }; //Выделена память для 50 таких структур //news* list=(news*)malloc(sizeof(news*)*50); //Далее ф-ция мейн, в которой идет вызов вот такой функции: news* n = NULL; void AnalizeBuffer() { n = (news*)malloc(sizeof(news)*50); } //////////////////////////////////////////////////////////////////////////////+ //----------------------------------------------------------------------------+ int _tmain(int argc, _TCHAR* argv[]) { int nRetCode = 0; news* list=(news*)malloc(sizeof(news)*50); news* a = list; AnalizeBuffer(); news* b = n; return(nRetCode); }
В дебагере и окне просмотра выдает правильные значения - все присвоеные значения совпадают.....
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Переделываю программу для экономического календаря с VB на C++.NET
Все в порядке, но почему-то при отладке n не приравнивается list, а записывается вообще какой-то левый указатель на неизвестно что! Пробовал extern news* list прописывать. Ничего помогает =(
В чем ошибка?
P.S. Ф-ция AnalizeBuffer() находится в отдельном .h файле, а объявление news* list происходит в .cpp файле. Может в этом проблема?