My code
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#include <fstream>
#include<iostream>
#include <experimental/filesystem>
int main() {
//cudaError_t err = cudaSuccess;
FILE *fp2 = fopen("key.txt", "r");
if (!fp2)
{
fprintf(stderr, "Error opening file!\n");
return 1;
}
const size_t max_lines = 55000;
const size_t max_line_len = 256;
char line[max_line_len];
size_t line_len;
char **m_keyword = NULL;
int icount = 0;
cudaError_t err = cudaMallocManaged((void**)&m_keyword, max_lines * sizeof(char*));
if (err != cudaSuccess)
{
fprintf(stderr, "Error allocating memory for m_keyword! %s\n", cudaGetErrorString(err));
fclose(fp2);
return 1;
}
do
{
if (!fgets(line, max_line_len, fp2))
{
if (ferror(fp2) && !feof(fp2))
{
fprintf(stderr, "Error reading from file!\n");
fclose(fp2);
return 1;
}
break;
}
line_len = strlen(line);
if ((line_len > 0) && (line[line_len - 1] == '\n'))
{
line[line_len - 1] = '\0';
--line_len;
}
_sleep(0.01);
err = cudaMallocManaged((void**)&(m_keyword[icount]), line_len + 1);
if (err != cudaSuccess)
{
fprintf(stderr, "Error allocating memory for m_keyword[%d]! %s\n", icount, cudaGetErrorString(err));
fclose(fp2);
return 1;
}
strcpy(m_keyword[icount], line);
++icount;
} while (icount < max_lines);
fclose(fp2);
return 0;
}
I’m using the code to read text file.
Link of text file : http://www.mediafire.com/file/l3ra5vb4za3g9v0/key.txt/file
If i read a files have under 26000 lines, everthing is fine. But if over 26000, i got error “Access violation writing location 0x0000000000000000”
Plese help me.