Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2012, 20:54   #1
harimambura
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 45
По умолчанию непонятки со структурами

вобщем так: банально объявил структуры через указатели, выделил память, всё гуд, а когда пытаюсь ввести данные, кричит, мол ошибка, нарушение прав записи. в чём трабл не понятно. пишу на VS2010

собсна код:
Код:
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
using namespace std;

struct StrSoft // обявление структуры храняшей данные о системе
{
	char OS[50];
	int Bits;
	char Ver[50];
};

struct StrConfig // обявление структуры храняшей данные о системе
{
	int CPU;
	int RAM;
	int HDD;
	struct  StrSoft *System;
};

void main()
	//основная процедура программы
{
	struct  StrConfig *Base;
	Base =  (struct  StrConfig*) malloc (sizeof(struct  StrConfig));
	printf_s("Please write your OS:\n");
	gets(Base->System->OS);
	printf_s("\nPlease write your system bits (64 or 32):\n");
	scanf("%d",Base->System->Bits);
	printf_s("\nPlease write version of your OS:\n");
	gets(Base->System->Ver);
	printf_s("\nPlease write your CPU (Hz):\n");
	scanf("%d",Base->CPU);
	printf_s("\nPlease write your RAM (Mb):\n");
	scanf("%d",Base->RAM);
	printf_s("\nPlease write your HDD (Gb):\n");
	scanf("%d",Base->HDD);
	getchar();
}
при наличии претензий перейдите сюда
harimambura вне форума Ответить с цитированием
Старый 17.02.2012, 21:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
malloc
Почему не New?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.02.2012, 21:18   #3
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Цитата:
gets(Base->System->OS);
Обращение к не инициализированному указателю.

Цитата:
sizeof(struct StrConfig)
sizeof(StrConfig)
crymchanin вне форума Ответить с цитированием
Старый 17.02.2012, 21:35   #4
harimambura
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 45
По умолчанию

Цитата:
Почему не New?
потому что Cи
з.ы. преподша гонит, если не выделять так память, да и вообще не смотрит, если не работать через указатели
Цитата:
sizeof(StrConfig)
пробовал, результата не дало

и как его проинициализировать? и обычно студия кричит, мол не инициализирован, а в данном случае такого не было
при наличии претензий перейдите сюда
harimambura вне форума Ответить с цитированием
Старый 17.02.2012, 21:44   #5
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Цитата:
пробовал, результата не дало
Ну это как-бы не относится к данной проблеме, но это является ошибкой.

Цитата:
и как его проинициализировать? и обычно студия кричит, мол не инициализирован, а в данном случае такого не было
Код:
Base->System = new StrSoft[sizeof(StrSoft)];
или

Код:
StrSoft System = new StrSoft[sizeof(StrSoft)];
Base->System = &System;
или сделать так:

Код:
typedef struct
{
	char OS[50];
	int Bits;
	char Ver[50];
} StrSoft;

struct StrConfig
{
	int CPU;
	int RAM;
	int HDD;
	StrSoft System;
};
Цитата:
преподша гонит, если не выделять так память
Фанатка С? =D

Последний раз редактировалось crymchanin; 17.02.2012 в 21:51.
crymchanin вне форума Ответить с цитированием
Старый 17.02.2012, 21:57   #6
harimambura
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 45
По умолчанию

Цитата:
Фанатка С? =D
ещё какая=/
ей под 65 лет, поэтому ее не перепрешь... это ещё цветочки. раньше было, что заставляла сортировать слова в строке, используя указатели и не прибегая к использованию дополнительных библиотек, тоесть используя только голый Си, а ещё нельзя было пользоваться другими строками, тоесть все операции только в данной строке. вот так вот)

щас попробую.. кстати насчёт sizeof, пробовали и так и так, разницы 0.

попробовал... ошибки, ошибки и ещё раз ошибки. вобщем всё не подходит)
при наличии претензий перейдите сюда

Последний раз редактировалось harimambura; 17.02.2012 в 22:01.
harimambura вне форума Ответить с цитированием
Старый 17.02.2012, 22:00   #7
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Цитата:
ещё какая=/
ей под 65 лет, поэтому ее не перепрешь... это ещё цветочки. раньше было, что заставляла сортировать слова в строке, используя указатели и не прибегая к использованию дополнительных библиотек, тоесть используя только голый Си, а ещё нельзя было пользоваться другими строками, тоесть все операции только в данной строке. вот так вот)
Хорошо хоть не на низкоуровневом программировании)
crymchanin вне форума Ответить с цитированием
Старый 17.02.2012, 22:06   #8
harimambura
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 45
По умолчанию

кстати говоря, она сама не нашла ошибок в моём коде... так что мне остается думать только что это приколы вижуал студио=/

а самое веселое то, что даже использование кода из примера MSDN не помогло)


вот что ещё нашёл:
scanf("%d",Base->CPU); - работает, и далее тоже, тоесть в коренную структуру так сказать записывает, а со второй (Base->System->...) не работает почему то...
при наличии претензий перейдите сюда

Последний раз редактировалось harimambura; 17.02.2012 в 22:29.
harimambura вне форума Ответить с цитированием
Старый 17.02.2012, 22:31   #9
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Разобрался че за ошибка:

Код:
#include "stdafx.h"
#include <iostream>

using namespace std;

struct StrSoft
{
	char OS[50];
	int Bits;
	char Ver[50];
};

struct StrConfig
{
	int CPU;
	int RAM;
	int HDD;
	StrSoft *System;
};


int main(int argc, char* argv[])
{

	StrConfig* s = new StrConfig[sizeof(StrConfig)];
	s->System = new StrSoft[sizeof(StrSoft)];
	s->CPU = 1;
	s->HDD = 2;
	s->RAM = 3;
	s->System->OS[1] = '1';
	s->System->Bits = 1;
	s->System->Ver[2] = '2';

	getchar();
	return 0;
}
Каждый элемент массива char нужно инициализировать по отдельности.
crymchanin вне форума Ответить с цитированием
Старый 17.02.2012, 22:40   #10
harimambura
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 45
По умолчанию

извращение конечно... но спасибо..
при наличии претензий перейдите сюда
harimambura вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со структурами _Колибри_ Помощь студентам 2 28.11.2011 02:09
c++, работа со структурами f1xmAn Помощь студентам 1 28.05.2011 20:29
[C++] Работа со структурами... max382 Помощь студентам 30 05.05.2011 15:56
в Си работа со структурами akakii Помощь студентам 3 04.03.2011 05:25
Программа с структурами Olya90 Помощь студентам 10 25.04.2009 17:18