Змінюй хід війни! Допомагай ЗСУ!
  • Знижка на баннерну рекламу 30%! Банер на всіх сторінках сайту, в мобільній та десктопній версії за 14 тис. грн на місяць. Статистика сайту. Контакт: [email protected]

Работа с файлами в Win32 API

  • Автор теми Автор теми inferno_99
  • Дата створення Дата створення
Ошибка адресса памяти. Ошибка происходит при записи или чтении?
Если при записи, проблема возможно в ****е которое записалось "лишним". Я тебе говорил что читать и писать лучше позаписям, что бі небіло лишнего гуна много.
 
Подробностей явно не хватает.
Во-первых, где именно падает, на какой строке, на какой операции, с какими значениями переменных?
Во-вторых, интересно было бы посмотреть на описание структуры Record.
В-третьих, может ли NumberOfItems быть равно 1 (т.е. быть меньше 2 используемых в цикле при чтении)?
А fIn вообще валидный? Проверить его на NULL не помешало бы (хотя мало вероятно, что в этом причина)
 
Код:
struct Record
{
	wchar_t Surname[Max_Symbols];
	wchar_t Name[Max_Symbols];
	wchar_t Otchestvo[Max_Symbols];
	wchar_t HomeAdress[Max_Symbols];
	wchar_t WorkAdress[Max_Symbols];
	wchar_t Phone[Max_Symbols];
	wchar_t Notes[Max_Symbols];
};

.....
.......
.......

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	RECT rect;
	int sb=0, k=0, i=0,  found=-1;

	wchar_t wstr1[50], *lpwstr1;
	lpwstr1=wstr1;

	wifstream ifs("D:\\Study\\SP\\Kursova\\kurs\\info.txt");
	wofstream cfOut("D:\\Study\\SP\\Kursova\\kurs\\info.txt");

	HDC hdc;
	
	switch (message)
	{
	case WM_CREATE:
		{

..........
........
.........
			FILE* fIn = fopen("D:\\Study\\SP\\Kursova\\kurs\\data", "rb");

			Record Data[100];
			fread((void*)Data, sizeof(Record) * 100, 1, fIn);

			for(int j=0;j<2;j++)
			{
				ListView_InsertItem(ListE,1);
				ListView_GetItemText(ListE,j,0,Data[j].Surname,Max_Symbols);
				ListView_GetItemText(ListE,j,1,Data[j].Name,Max_Symbols);
				ListView_GetItemText(ListE,j,2,Data[j].Otchestvo,Max_Symbols);
				ListView_GetItemText(ListE,j,3,Data[j].HomeAdress,Max_Symbols);
				ListView_GetItemText(ListE,j,4,Data[j].WorkAdress,Max_Symbols);
				ListView_GetItemText(ListE,j,5,Data[j].Phone,Max_Symbols);
				ListView_GetItemText(ListE,j,6,Data[j].Notes,Max_Symbols);
			};
}

Всё та же ошибка!
Помогите срочно исправить - времени нету уже((((((((
 
Всё та же ошибка!
Помогите срочно исправить - времени нету уже((((((((
Cударь, Вы либо выложите какой-нибудь компилирующийся проект, в котором воспроизводится Ваша ошибка, или хотя бы ответьте на все вопросы

Во-первых, где именно падает, на какой строке, на какой операции, с какими значениями переменных?(Неужели так трудно запустить приложение под дебагом и посмотреть, что происходит?)
Во-вторых, интересно было бы посмотреть на описание структуры Record.
В-третьих, может ли NumberOfItems быть равно 1 (т.е. быть меньше 2 используемых в цикле при чтении)?
А fIn вообще валидный? Проверить его на NULL не помешало бы (хотя мало вероятно, что в этом причина)
А то, понимаете ли, ясновидящие, извините, временно недоступны.
 
Всё та же ошибка!
Помогите срочно исправить - времени нету уже((((((((

А в режиме трассировки слабо прогнать свое творение? Потом поставить точку остановки на том месте где вываливается и более детально еще разок посмотреть?
 
2 jammer77
Трасировка более свойственна гдб где нет нормального гуя для дебагера ;)

2 inferno_99
Я знаю **** у тебя краш :)
Твой файл никуя не заполнен.
делай вот так:
Код:
switch (message)
	{
	case WM_CREATE:
		{

..........
........
.........
			FILE* fIn = fopen("D:\\Study\\SP\\Kursova\\kurs\\data", "rb");
                                  if (fIn == NULL)
                                       break;
 
			Record data;
			for(int j=0;j<100 && fread((void*)&data, sizeof(Record), 1, fIn);++j)
					
				ListView_InsertItem(ListE,1);
				ListView_GetItemText(ListE,j,0,data.Surname,Max_Symbols);
				ListView_GetItemText(ListE,j,1,data.Name,Max_Symbols);
				ListView_GetItemText(ListE,j,2,data.Otchestvo,Max_Symbols);
				ListView_GetItemText(ListE,j,3,data.HomeAdress,Max_Symbols);
				ListView_GetItemText(ListE,j,4,data.WorkAdress,Max_Symbols);
				ListView_GetItemText(ListE,j,5,data.Phone,Max_Symbols);
				ListView_GetItemText(ListE,j,6,data.Notes,Max_Symbols);
			};
}

Запись я бы тоже изменил:
Код:
case WM_DESTROY:
		{
			FILE* fOut = fopen("D:\\Study\\SP\\Kursova\\kurs\\data", "wb");
			
			Record data;
			for(int j=0;j<NumberOfItems;j++)
			{
				ListView_GetItemText(ListE,j,0,data.Surname,Max_Symbols);
				ListView_GetItemText(ListE,j,1,data.Name,Max_Symbols);
				ListView_GetItemText(ListE,j,2,data.Otchestvo,Max_Symbols);
				ListView_GetItemText(ListE,j,3,data.HomeAdress,Max_Symbols);
				ListView_GetItemText(ListE,j,4,data.WorkAdress,Max_Symbols);
				ListView_GetItemText(ListE,j,5,data.Phone,Max_Symbols);
				ListView_GetItemText(ListE,j,6,data.Notes,Max_Symbols);
						
			           fwrite((const void*)&data, sizeof(Record), 1, fOut); 
                                  };
 
			PostQuitMessage(0);
			break;
		}
При условии что NumberOfItems актуальное число записей.
 
2 jammer77
Трасировка более свойственна гдб где нет нормального гуя для дебагера ;)

Трассировка она же отладка она же встроенный в ide дебагер свойствена во всех местах где присутствуют баги.
 
Трассировка она же отладка она же встроенный в ide деббагер свойствена во всех местах где присутствуют баги.

Ну тогда, прошу прощения :) Я под трассировкой обычно понимаю что нить типа:
LOG("TRACE: a = %d, B=%d c=\"%s\"" a, b, c);
 
Ну тогда, прошу прощения :) Я под трассировкой обычно понимаю что нить типа:
LOG("TRACE: a = %d, B=%d c=\"%s\"" a, b, c);

А я понимаю под ней только то что она означает - "пошаговое выполнение программы". И в случае ТС вполне бы покатил встроенный в IDE трассировщик.
 
Великий пастух всех времен Тыемураз вот уже неделя как находится в телепортации в созвездии Млечного пути,разрабатывает классы обьектов черных дыр со всеми методами и полями ,описывающими элементарные частицы,их взаимодействия,конструкторы и деструкторы межпланетных и межгалактических цивилизаций в среде ACMOL_33_TORMOZ_WATER ,а эти гуськи_тамагочи не поняли ,по сих пор,как с файлами работать.
Взятиь бы трайсер потяжелее и жахнуть по томогочке,шоб искра зажглась,и учебник взял в руки.
 
Великий пастух всех времен Тыемураз вот уже неделя как находится в телепортации в созвездии Млечного пути,разрабатывает классы обьектов черных дыр со всеми методами и полями ,описывающими элементарные частицы,их взаимодействия,конструкторы и деструкторы межпланетных и межгалактических цивилизаций в среде ACMOL_33_TORMOZ_WATER ,а эти гуськи_тамагочи не поняли ,по сих пор,как с файлами работать.
Взятиь бы трайсер потяжелее и жахнуть по томогочке,шоб искра зажглась,и учебник взял в руки.

А музыку к этому еще не написал?
 
А помойму это однояйцевый брат Влада 7 :)
 
:), предупреждаю - я - двухяйцевый (и единственный сын своих родителей)

Ну ладно, знач ты популярен под тебя уже косят :) Хотя... сколько многа разных историй было в "Просто мариях" всяких ;)
 
ХЗ я ж не акушер :)
З.Ы. Однояйцевое родство не подразумевает однояйевость ;) Ну это как бы ФЬЮ ;)
 
Назад
Зверху Знизу