C/Visual C - Error en programa "basico"

 
Vista:
sin imagen de perfil

Error en programa "basico"

Publicado por Adrian (7 intervenciones) el 22/06/2016 20:01:18
Buenas tardes, estoy empezando con C y estoy siguiendo un curso de youtube, en un ejercicio concreto he realizado el codigo que se pide, y despues comparando con el video lo tengo identico, pero me tira un error al ejecutar en la consola, el codigo es este

(El depurador me dice que el error salta en el bucle de impreson del vecotor redimensionado, pero no se por que, en el da un error de segmentacion)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
 
void aleatorio (int *vector, int N);
 
int main(){
 int i, j, k;
 int N = 10;
 int *vector;
 
 vector =(int*)malloc(N*sizeof(int)); //asigna un tamaño al vector dinamico
 if(vector == NULL){
  printf("No se ha podido reservar espacio de memoria para el vector-\n");
 }
 else{
  aleatorio(vector, N);
 
  for(i=0; i<N; i++){
   j=i+1;
   while(j<N){
    if((vector+1)==(vector+j)){
     for(k = j; k+1<N; k++){
      (vector+k)=(vector+k+1);
     }
     N--;
    }
    else{
     j++;
    }
   }
  }
  vector=(int*)realloc(vector,N*sizeof(int)); //Redimensiona el vector, conservando sus valores
  if(vector=NULL){
   printf("No se ha podido reservar espacio de memoria para el vector");
  }
  else{
   for(i=0; i<N; i++){
    printf("%i, ",*(vector+i));
   }
   printf("\n");
  }
 }
 
 system("pause");
 return 0;
}
 
void aleatorio (int *vector, int N){
 int i;
 srand(time(NULL));
 
 for(i=0; i<N; i++){
  *(vector+i)=rand() % 3;
  printf("%i, ",*(vector+i));
 }
 printf("\n");
}

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dian

Error en programa "basico"

Publicado por Dian (3 intervenciones) el 23/06/2016 06:56:33
Si empiezas en C no te vayas a matrices dinámicas, ese es un tema un poquito avanzado, primero aprende vectores y matrices fijos y después te metes a lo que sigue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error en programa "basico"

Publicado por Adrian (7 intervenciones) el 23/06/2016 07:36:00
Gracias por contestar.

No pretendo profundizar en este tema pero ya que he hecho el ejercicio me gustaría saber porque da ese error de segmentación y como solucionarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en programa "basico"

Publicado por Tom (619 intervenciones) el 23/06/2016 11:12:46
Es lo malo de copiar sin más ...

Te han tendido, como mínimo, una trampa (o has copiado mal) aquí:

if(vector=NULL){

printf("No se ha podido reservar espacio de memoria para el vector");

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error en programa "basico"

Publicado por Adrian (7 intervenciones) el 23/06/2016 11:20:16
No me gusta copiar código, pero a veces lo hago con cosas complejas, cuando veo que funciona le pongo el depurador para entenderlo y lo voy comentando.

Dices que hay un fallo ahí, yo diría que no, el depurador no lo para ahí, da un fallo de segmentación en el bucle de impresión de el vector redimensionado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en programa "basico"

Publicado por Tom (619 intervenciones) el 23/06/2016 12:35:04
Como verías en el código solucionado que te han pegado, si además te fijaras, y además tuvieras una base de lenguaje antes de hacer código, el error es que usas una asignación, en lugar de una comparación.
Si haces que vector apunte a NULL, cualquier acceso posterior a vector tratará de dereferenciar NULL, así que obtendrás esa bonita SIGSEGV.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error en programa "basico"

Publicado por Adrian (7 intervenciones) el 23/06/2016 12:40:22
Ohhhh vaya cagada! Creeme que sé que es una asignación pero ya estaba saturado y no lo veía, como cuando te falta un punto y coma y no hay manera, gracias! Hoy lo pruebo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en programa "basico"

Publicado por Tom (619 intervenciones) el 23/06/2016 13:02:09
Pasa mucho, incluso a gente con mucha experiencia, así que no te preocupes. Lo que tienes que hacer siempre es dar más crédito a lo que te dicen (aunque al final se demuestre incorrecto) que a lo que tú piensas, ya que como tú mismo reconoces, es tu propia "obcecación" la que te impide ver el error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error en programa "basico"

Publicado por Adrian (7 intervenciones) el 23/06/2016 13:17:09
Tal era la obcecación que no lo he visto ni cuando el compañero me lo ha indicado... Por esobhe decidido entrar a este foro y empezar a participar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en programa "basico"

Publicado por dario (13 intervenciones) el 23/06/2016 12:17:25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//prueba con este codigo
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void aleatorio (int *vector, int N);
 
int main()
{
	int i, j, k;
	int N = 10;
	int *vector;
 
	vector =(int*)malloc(N*sizeof(int)); //asigna un tamaño al vector dinamico
 
	if(vector == NULL) {
		printf("No se ha podido reservar espacio de memoria para el vector-\n");
	}
 
	else {
		aleatorio(vector, N);
		for(i=0; i<N; i++) {
			j=i+1;
			while(j<N) {
				if((vector+1)==(vector+j)) {
					for(k = j; k+1<N; k++) {
						*(vector+k)=*(vector+k+1); //aqui te faltaban los asteriscos "*"
					}
					N--;
				}
				else {
					j++;
				}
			}
		}
		vector=(int*)realloc(vector,N*sizeof(int)); //Redimensiona el vector, conservando sus valores
		if(vector==NULL) {
			printf("No se ha podido reservar espacio de memoria para el vector");
		}
		else {
			for(i=0; i<N; i++) {
				printf("%i, ",*(vector+i));
			}
			printf("\n");
		}
	}
 
	system("pause");
	return 0;
}
 
void aleatorio (int *vector, int N) {
	int i;
	srand(time(NULL));
	for(i=0; i<N; i++) {
		*(vector+i)=rand() % 3;
		printf("%i, ",*(vector+i));
	}
	printf("\n");
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error en programa "basico"

Publicado por Adrian (7 intervenciones) el 23/06/2016 12:41:20
Gracias, malditas asignaciones! Me pasa a menudo tanto en java como aquí, conoció el error y se la diferencia pero a veces los ojos nos juegan malas pasadas, cuando llegue a casa pruebo! Gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Error en programa "basico"

Publicado por agustin (272 intervenciones) el 23/06/2016 13:14:48
Yo uso borland c++builder 6, lo se, los hay más nuevos y mejores pero este me va bien. En las opciones te viene para indicar que warnings mostrar y ese me lo habría indicado en un warning. Mira las opciones del tuyo a ver si ves opciones para los warnings que muchas veces ayudan mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error en programa "basico"

Publicado por Adrian (7 intervenciones) el 23/06/2016 13:17:46
Yo uso dev++ supongo que a ti este código te habría avisado, sin el foro me podría haber vuelto loco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar