Jump to content
Fórum Script Brasil
  • 0

Problema com Ponteiros - Windows


fluciamat

Question

Olá pessoal, essa é minha primeira vez por aqui e gostaria de pedir uma ajuda para vocês. Estou fazendo um código super simples, quando eu compilo não dá erro, mas quando eu executo acusa "O teste.exe encontrou um problema e precisa ser fechado." Estou usando o Windows XP e o Code Blocks. Segue o código:

#include <iostream>

int main()
{
int* a;
int b=2;
*a=b;
}

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

quando a é declarado, ele é alocado numa posicao qualquer na memoria. você não sabe q dados existiam nessa posicao, pode ser qualquer coisa.

entretanto sabemos que tem um valor, provavelmente, sujeira deixada pelo programa q usou esse espaco de memoria anteriormente.

se imaginarmos então, q depois de ser declarado, a possui um valor X, e considerando que a é um tipo ponteiro, sabemos que ele aponta pra a posicao X de memoria.

e você não sabe onde fica essa posicao X. essa posicao pode já estar em uso por algum outro programa ou pelo sistema operacional.

quando você faz isso:

*a = b;

você esta dizendo para o programa copiar o valor de b na posicao X da memoria.

mas se outro processo já esta utilizando essa posicao, o seu programa simplesmente não vai ter permissao. o windows é um sistema operacional protegido, um processo não pode interferir na regiao da memoria que esta sendo utilizada por outro processo (ate pode, mas usando funcoes proprias pra isso. seria como "pedir permissao" ao sistema operacional).

em resumo, o "problema que o windows encontrou" foi a tentativa do teste.exe de acessar (e o pior, de tentar alterar) uma regiao de memoria q esta sendo usada por outro processo.

e como ele não permite isso, fecha o teste.exe.

Link to comment
Share on other sites

  • 0

Oi Kuroi, novamente obrigada, mas continuo com problemas com ponteiros. Dê só uma olhada nesse código simples

#include <iostream>

#include <vector>

int main()

{

for (unsigned int v=0; v < 3; v++)

{

std::vector<int*> again1;

again1[v]=new int;

std::vector<int*> again2;

again2[v]=NULL;

std::cout << (again1).size() << std::endl;

std::cout << (again2).size() << std::endl;

}

}

Quando eu compilo obtenho "O teste.exe encontrou um problema e precisa ser fechado."

O que está errado?

Link to comment
Share on other sites

  • 0

Oi Kuroi, novamente obrigada, mas continuo com problemas com ponteiros. Dê só uma olhada nesse código simples

#include <iostream>

#include <vector>

int main()

{

for (unsigned int v=0; v < 3; v++)

{

std::vector<int*> again1;

again1[v]=new int;

std::vector<int*> again2;

again2[v]=NULL;

std::cout << (again1).size() << std::endl;

std::cout << (again2).size() << std::endl;

}

}

Quando eu compilo obtenho "O teste.exe encontrou um problema e precisa ser fechado."

O que está errado?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...