1 // Copyright 2015 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 /* 8 #include <string.h> 9 #include <stdint.h> 10 #include <stdlib.h> 11 12 void f(int32_t *p, int n) { 13 int32_t * volatile q = (int32_t *)malloc(sizeof(int32_t) * n); 14 memcpy(p, q, n * sizeof(*p)); 15 free(q); 16 } 17 18 void g(int32_t *p, int n) { 19 if (p[4] != 1) { 20 abort(); 21 } 22 } 23 */ 24 import "C" 25 26 import ( 27 "unsafe" 28 ) 29 30 func main() { 31 a := make([]int32, 10) 32 C.f((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a))) 33 a[4] = 1 34 C.g((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a))) 35 } 36