malloc으로 할당 된 메모리 공간을 복사하는 방법을 배우려고합니다. 나는 memcpy를 사용하는 것이 최선의 방법이라고 가정하고있다.트랩 중단 : 6, 배열 복사에 memcpy 사용
저는 파이썬에 대해 더 잘 알고 있습니다. 파이썬에서 내가하려고하는 것과 동등한 것은 다음과 같습니다.
import copy
foo = [0, 1, 2]
bar = copy.copy(foo)
여기까지가 있습니다.
foo[0]: 0
foo[1]: 1
foo[2]: 2
Abort trap: 6
내가 gcc -o foo foo.c
로 스크립트를 컴파일하고있어 다음과 같이
/* Copy a memory space
* */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
// initialize a pointer to an array of spaces in mem
int *foo = malloc(3 * sizeof(int));
int i;
// give each space a value from 0 - 2
for(i = 0; i < 3; i++)
foo[i] = i;
for(i = 0; i < 3; i++)
printf("foo[%d]: %d\n", i, foo[i]);
// here I'm trying to copy the array of elements into
// another space in mem
// ie copy foo into bar
int *bar;
memcpy(&bar, foo, 3 * sizeof(int));
for(i = 0; i < 3; i++)
printf("bar[%d]: %d\n", i, bar[i]);
return 0;
}
이 스크립트의 출력입니다. 저는 2015 년 Macbook Pro를 사용하고 있습니다.
내 질문은 :
- 이 malloc을 사용하여 만든 배열을 복사하는 가장 좋은 방법이 있나요?
Abort trap: 6
의 의미는 무엇입니까?memcpy
은 무엇을 사용하는지 또는 어떻게 사용했는지 오해하니?
종류와 관련,
마커스 목사
로
&
운영자 주소의 드롭 할 필요가'bar'가 할당 전혀 기억이 없습니다, 그것은 초기화되지 않은 포인터 일뿐입니다. ('foo'와 마찬가지로)'&'를 버리고'memcpy (bar, foo, 3 * sizeof (int));를 사용하십시오. –@WeatherVane 정말 고마워요. 담당자를 원하면 대답으로 게시하십시오. – marcusshep