Im получаяНарушения прав доступа чтение местоположения 0x00000000 в C
доступа чтение нарушения расположения 0x00000000
в то время как я пытаюсь запустить мою программу. Я могу создать программу без каких-либо ошибок, но когда я попытаюсь запустить ее, она сработает. Я читаю здесь, в StackOverflow, что эта проблема возникает, когда есть указатели, указывающие ни на что. Я искал код без каких-либо успехов. Кто-нибудь здесь, кто может знать, где проблема?
main.c
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
#define FILENAME 256
/*
*
*/
int main(int argc, char** argv) {
char * data = readFromFile("input.txt");
int arrLength = getArrayLength(data);
char * encryptedData = (char *)malloc(arrLength * sizeof(char) + 1 * sizeof(char));
decrypt(data, arrLength, 1, encryptedData);
encrypt(data, arrLength, 1, encryptedData);
int menu = 0;
int key;
printf("Enter 1 for decrypt or 2 for encrypt from input.txt");
scanf("%d", &menu);
if (menu == 1) {
printf("Enter key:");
scanf("%d", &key);
encrypt(data, arrLength, key, encryptedData);
}
else {
printf("Enter key:");
scanf("%d", &key);
decrypt(data, arrLength, key, encryptedData);
}
writeToFile("output.txt", encryptedData);
printf("\n Enter any key to exit 11: ");
getchar();
return (1);
}
functions.c
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
char * readFromFile(char * fileName) {
FILE *fp;
char c;
if ((fp = fopen(fileName, "r")) == NULL) {
puts("Error: input file invalid");
return NULL;
}
int count = 0;
while ((c = fgetc(fp) != EOF)) count++;
rewind(fp);
char *data = (char *)malloc(count * sizeof(char) + 1 * sizeof(char));
count = 0;
while (!feof(fp)) {
fscanf(fp, "%c", &data[count++]);
}
fclose(fp);
return data;
}
void writeToFile(char * fileName, char *data) {
FILE *fp;
if ((fp = fopen(fileName, "w")) == NULL) {
puts("Error: output file invalid");
}
else {
int i = 0;
while (data[i] != '\0') {
fputc(data[i], fp);
i++;
}
fclose(fp);
}
}
int encrypt(char *plainText, int arrLength, int key, char *cipherText) {
if (key > 25 || key < 1) {
puts("Error: invalid key");
return 0;
}
for (int i = 0; i < arrLength; i++) {
if ((plainText[i] >= 97 || plainText[i] <= 122) || (plainText[i] >= 65 || plainText[i] <= 90)) {
// only encrypt alpha characters
cipherText[i] = plainText[i] + key;
}
else {
cipherText[i] = plainText[i];
}
}
return 1;
}
int decrypt(char *plainText, int arrLength, int key, char *cipherText) {
if (key > 25 || key < 1) {
puts("Error: invalid key");
return 0;
}
for (int i = 0; i < arrLength; i++) {
if ((plainText[i] >= 97 || plainText[i] <= 122) || (plainText[i] >= 65 || plainText[i] <= 90)) {
// only decrypt alpha characters
cipherText[i] = plainText[i] - key;
}
else {
cipherText[i] = plainText[i];
}
}
return 1;
}
int getArrayLength(char *data) {
int i = 0;
while (data[i] != '\0') {
i++;
}
return i;
}
functions.h
#ifndef MY_FUNCTION
#define MY_FUNCTION
char * readFromFile(char * fileName);
void writeToFile(char * fileName, char *data);
int encrypt(char *plainText, int arrLength, int key, char *cipherText);
int decrypt(char *plainText, int arrLength, int key, char *cipherText);
int getArrayLength(char *data);
#endif
Ваша программа довольно длинная. Не могли бы вы попытаться сузить его? – fuz
Добро пожаловать в переполнение стека! [Пожалуйста, ознакомьтесь с этим обсуждением, почему бы не использовать возвращаемое значение 'malloc()' и family в 'C'.] (Http://stackoverflow.com/q/605845/2173917). –
Добро пожаловать в переполнение стека! Пожалуйста, см. [Почему? »(! Feof (file))« всегда неправильно? »(Http://stackoverflow.com/q/5431941/2173917) –