Я пытаюсь реализовать алгоритм KNN из интереса с помощью кода помощи с форума. Код следующий.Необработанное исключение
#include <opencv\cv.h>
#include <opencv\ml.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
using namespace std;
using namespace cv;
//typedef unsigned char BYTE;
int readFlippedInteger(FILE *);
int main()
{
FILE *fp = fopen("D:\\KNN\\train-images.idx3-ubyte", "rb");
FILE *fp2 = fopen("D:\\KNN\\train-labels.idx1-ubyte", "rb");
if(!fp || !fp2)
{
cout<<"Files not Found"<<endl;
return 0;
}
int magicNumber = readFlippedInteger(fp);
int numImages = readFlippedInteger(fp);
int numRows = readFlippedInteger(fp);
int numCols = readFlippedInteger(fp);
fseek(fp2, 0x08, SEEK_SET);
int size = numRows*numCols;
CvMat *trainingVectors = cvCreateMat(numImages, size, CV_32FC1);
CvMat *trainingLabels = cvCreateMat(numImages, 1, CV_32FC1);
//BYTE *temp = new BYTE[size];
unsigned char *temp = (unsigned char *) malloc(size);
unsigned char tempClass=0;
for(int i=0; i < numImages; i++)
{
fread((void*)temp, size, 1, fp);
fread((void*)(tempClass), sizeof(unsigned char*), 1, fp2);
trainingLabels->data.fl[i] = tempClass;
for(int k=0; k < size; k++)
trainingVectors->data.fl[i*size+k] = temp[k];
}
KNearest knn(trainingVectors, trainingLabels);
printf("Maximum k: %d\n", knn.get_max_k());
fclose(fp);
fclose(fp2);
cvReleaseMat(&trainingVectors);
cvReleaseMat(&trainingLabels);
return 0;
}
int readFlippedInteger(FILE *fp)
{
int ret = 0;
unsigned char *temp;
temp = (unsigned char*)(ret);
fread(&temp[3], sizeof(unsigned char*), 1, fp);
fread(&temp[2], sizeof(unsigned char*), 1, fp);
fread(&temp[1], sizeof(unsigned char*), 1, fp);
fread(&temp[0], sizeof(unsigned char*), 1, fp);
return ret;
}
Вместо BYTE я использовал символ unsigned, который, как я думаю, должен выполнять ту же работу. Поправьте меня, если я ошибаюсь.
Тем не менее, я не специалист в области программирования, но когда я запускаю код я получаю эту ошибку
* Необработанное исключение в 0x000007FEE68F7450 (msvcr110d.dll) в K-Ближайшего Neighbour.exe: 0xC0000005: нарушение прав доступа написание местоположения 0x0000000000000003
Может кто-то помочь мне построить этот код .. Спасибо
Спасибо .. Это дает отладочную ошибку при запуске. –
fread дать 'утверждение не удалось'? – CapelliC
Я так думаю, потому что ошибка читает путь от fread.c по строке 147.Expresson (buffer! = NULL) –