2012-12-10 2 views
0

저는 C 프로그램을 가지고 있습니다 만, 그만큼 간단하지만 지적으로 포인터를 사용하는 것은 상당히 나쁩니다. 아무도 내가 이걸 도와 주면 정말 고마워. 그것은 두 가지 기능을가집니다. 첫 번째 함수는 10 개의 정수 1-10이있는 배열을 만듭니다. 두 번째 함수는 해당 배열을 출력합니다. 감사합니다, 나는 현재 얻을C 인쇄 1-10, 무언가가 잘못되었습니다

#include<stdio.h> 

//function to create array of 10 ints 
int* myArray(void) 
{ 
int array[10], i; 

for(i = 0; i < 10; ++i) 
{ 
    array[i] = i + 1; 
} 
return array; 
} 


//function to printout the array of 10 ints 
void printArray(void) 
{ 
int *array = myArray(); 
int i; 
for(i = 0; i < 10; ++i) 
{ 
printf("%d ", array[i]); 
} 
} 

//my main 
int main() 
{ 
myArray(); 
printArray(); 

} 

출력은 1 일 2 3,078,316 5 6 3,078,824 257,921,824 1,905,931,270 -2 꽤 롤 엉망이다.

+2

이는 "포인터"자체와는 아무런 관련이 없습니다. 아래 cegfault의 응답을보십시오. 문제는 "int array [10]"을 * local * 변수로 정의하고 범위를 종료 할 때 지역 변수 *가 더 이상 존재하지 않는다는 것입니다. "malloc()"(힙에서 변수를 할당하는 대신 스택에서 로컬로 할당하는 것)은이 문제를 피하는 하나의 방법입니다. – paulsm4

답변

5

문제는 로컬 변수를 myArray에서 반환한다는 것입니다. int array[10]을 선언하면 array이 스택에 저장되고 myArray이 반환되면 파괴됩니다. 즉, myArray이 잘못된 포인터를 반환하고 있음을 의미합니다.

함수 내에 배열을 작성해야하는 경우 malloc을 사용하십시오. 즉 : 미래의 어떤 시점에서 당신이 free() 배열에해야한다는

int *array = (int *)malloc(10 * sizeof(int)); 

참고. 예를 들어, printArray :