question

argv e argc ler em arquivos?

Eu estou tentando se familiarizar com o tratamento de ponteiros como matrizes, argv e argc e apenas apontadores em geral. Toda vez que tento executar este código compila, mas quando eu executá-lo no prompt de comando eu voltar "exceção não tratada: System.AccessViolationException: tentou ler ou gravar memória protegida. Isso é muitas vezes uma indicação que outra memória está corrompida. no<_iobuf ,="" sbyte=""> de fscanf.. Main<Int32 argc,="" sbyte="" argv=""> em c:\programs\visual studio 2010\argvread\argvread.cpp:line 40 em _mainCRTStartup<>"e não tenho idéia o que isso significa.

Eu acho que tem algo a ver com a maneira que eu estou lendo no arquivo. Eu estou usando o Microsoft Visual Studio 2010, mas tentando escrever em linguagem C, em vez de C++ se isso tem alguma coisa a ver com isso também. Se alguém poderia me ajudar a ver o que estou fazendo errado eu agradeceria muito. Aqui está o que eu tenho:


#include "stdafx. h"
# incluem "stdio. h"
# incluem "STDLIB. h"
# incluem "String"
usando o namespace System;

//FUNCTIONS
void find_average (int soma, int int total, média);

int main (int argc, char argv[])
{
int arr;
int soma = 0;
//Total é o número total de elementos encontrados, não uma soma
int total = 0;
média de int = 0;

//Make-se de que existem dois argumentos, uma execução e um arquivo de entrada
se (argc! = 2)
{
printf ("\nError. Não é suficiente ou demasiados argumentos. \n");
printf ("deve haver a execução e a entrada do arquivo. \n");
Exit (EXIT_FAILURE);
}

//Declare um ponteiro de arquivo para abrir o arquivo de entrada de linha de comando
ARQUIVO em = fopen (argv [1], "r");
//Check para ver se o arquivo foi encontrado
= se (no = NULL)
{
printf ("\nInput arquivo não encontrado");
Exit (EXIT_FAILURE);
}

//Read os valores do arquivo de entrada
enquanto (! feof(in))
{
se (fscanf (em, "% d", &arr[total]) > 0)
{
//Sum todos os elementos e incriment total elementos encontrados
soma = soma + arr [total];
total + +;
}
}
//Close o arquivo
fclose (em);

//Find média
find_average (& soma, & total, & média);

//Print resultados
printf ("\nThere foram %d entradas encontradas. \n", total);
printf ("a soma é %d\n", soma);
printf ("a média é %d\n", média);

retorno 0;
}

void find_average (int soma, int int total, média)
{
média = soma / total;
} Eu estou executando este código, digitando o seguinte no prompt de comando: sample1.txt de argvread.exe, então não há 2 argumentos necessários, a execução e um arquivo para ler em.</Int32></_iobuf>
resposta Resposta
Não parece que você alocado na memória para int arr;

Você precisa para qualquer um fazer arr uma matriz grande o suficiente para ler no arquivo.

int arr [6666];

ou alocar memória para ele.

int arr = (int ) malloc (sizeof (int) 6666);

então verificar que o total não exceda 6666 ou qualquer número que você escolher

Comentários Comentários

Guest
Diana na 2 Mar 2023
5
Pelo que você mencionou, parece que o problema está na leitura do arquivo. Você está abrindo o arquivo com um ponteiro de arquivo em "r" (modo de leitura), mas parece que não está alocando memória suficiente para o array que está tentando preencher com os valores do arquivo. Este código que você tem para ler os valores do arquivo não está funcionando corretamente e está gerando um erro de acesso à memória protegida. Uma alternativa seria usar a função de alocação dinâmica de memória, como "malloc", para alocar memória suficiente para o array "arr" antes de ler os valores do arquivo. Além disso, verifique se o arquivo de entrada "sample1.txt" realmente existe no mesmo diretório que o arquivo executável "argvread.exe". Certifique-se de que todos os ponteiros e arrays estejam sendo corretamente inicializados e liberados. Isso deve ajudar a corrigir o problema de acesso à memória protegida que você está enfrentando. Espero que isso ajude! Boa sorte!

O seu comentário
Acho que a resposta não está correta ou que você gostaria de acrescentar mais
alguma informação? Envie o seu comentário abaixo..

Guest


HTML não é permitido!

Image Code

Digite os caracteres que aparecem na imagem por isso sabemos que você é humano!

Receber um email quando alguém acrescenta outro comentário a esta pergunta



Topo da página


Home  Terms
Copyright © Accelerated Ideas 2005-2024
All rights reserved