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 5package main 6 7/* 8#include <string.h> 9#include <stdint.h> 10#include <stdlib.h> 11 12void 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 18void g(int32_t *p, int n) { 19 if (p[4] != 1) { 20 abort(); 21 } 22} 23*/ 24import "C" 25 26import ( 27 "unsafe" 28) 29 30func 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