Вот код. Выделение не удается на поле «Биты».
Код: Выделить всё
#include "z_cu_t.cuh"
int main()
{
z_t z = z_init(2);
z_cu_t* z_cu;
cudaMalloc(&z_cu, sizeof(z_cu_t));
z_cu_from_z(&z, z_cu); //Segmentation fault here
z_free(&z);
z_cu_free(z_cu);
cudaFree(z_cu);
return 0;
}
< /code>
z_cu_t.cu
#include
#include
#include "z_cu_t.cuh"
__global__ void z_cu_free(z_cu_t* z)
{
cudaFree(z->bits);
z->bits = 0;
z->size = 0;
}
void z_cu_from_z(z_t* to, z_cu_t const* from)
{
cudaMemcpy(&to->size, &from->size, sizeof(size_t), cudaMemcpyHostToDevice);
printf("OK\n");
cudaMalloc(&to->bits, sizeof(int) * from->size); //Segmentation fault here
printf("KO\n");
cudaMemcpy(to->bits, from->bits, sizeof(int) * from->size, cudaMemcpyHostToDevice);
}
void z_from_z_cu(z_t* to, z_cu_t const* from)
{
cudaMemcpy(&to->size, &from->size, sizeof(size_t), cudaMemcpyDeviceToHost);
cudaMalloc(&to->bits, sizeof(int) * to->size);
cudaMemcpy(to->bits, from->bits, sizeof(int) * to->size, cudaMemcpyDeviceToHost);
}
< /code>
z_cu_t.cuh
#ifndef Z_CU_T_H
#define Z_CU_T_H
struct z_cu_t_struct
{
int* bits;
size_t size;
};
typedef struct z_cu_t_struct z_cu_t;
__global__ void z_cu_free(z_cu_t* z);
extern "C"
{
#include "z_t.h"
}
void z_cu_from_z(z_t* to, z_cu_t const* from);
void z_from_z_cu(z_t* to, z_cu_t const* from);
#endif // Z_CU_T_H
< /code>
z_t.c
#include
#include
#include "z_t.h"
z_t z_init(size_t size)
{
z_t z;
z.size = size;
z.bits = malloc(sizeof(int) * size);
memset(z.bits, 0, sizeof(int) * size);
return z;
}
void z_free(z_t* z)
{
free(z->bits);
z->bits = 0;
z->size = 0;
}
< /code>
z_t.h
#ifndef Z_T_H
#define Z_T_H
struct z_t_struct
{
int* bits;
size_t size;
};
typedef struct z_t_struct z_t;
z_t z_init(size_t size);
void z_free(z_t* z);
#endif // Z_T_H
< /code>
Затем я компилируюсь и компилируется и ссылкой проект: < /p>
nvcc -c main.cu
nvcc -rdc=true -c z_cu_t.cu
nvcc z_t.o main.o z_cu_t.o -o main
< /code>
Выход: < /p>
OK
Segmentation error (core dumped)
< /code>
он сбои на строке 18 "z_cu_t.cu": < /p>
cudaMalloc(&to->bits, sizeof(int) * from->size); //Segmentation fault here
Подробнее здесь: https://stackoverflow.com/questions/794 ... re-in-cuda