Realloc无效指针

时间:2014-11-29 11:29:05

标签: pointers memory malloc realloc assertion

我正在编写一个用于通过CUDA计算AES的代码,但是我在代码的CPU端有一些realloc()问题。 当我从磁盘读取数据时,我需要加密,我使用这段代码:

puint4 * cipher_block;
u32 posizione = 0;
FILE * inputFile = fopen("input.in","rb");
while(!feof(inputFile)){
    if((cipher_block = (puint4 *)realloc(cipher_block,sizeof(puint4)*(posizione+1))) == NULL){
       printf("\nERROR\n");
    }
    //read data
    .....
    posizione++;
}//end while

它工作正常,直到我添加(跟随)我用于在GPU上分配内存的另一段代码:

puint4 * round_key_GPU;
puint4 * cipher_block_GPU;

cudaMalloc((void**)&round_key_GPU,sizeof(puint4)*11);
cudaMalloc((void**)&cipher_block_GPU,sizeof(puint4)*(posizione+1));

//other instructions
....

/* Libero le risorse */
cudaFree(round_key_GPU);
cudaFree(cipher_block_GPU);
free(round_key_GPU);
free(cipher_block_GPU);
free(cipher_block);
free(round_key);

当我添加这段代码时,realloc()指令返回错误:

*** Error in `./test.x': realloc(): invalid pointer: 0x0000000000402338 ***

如果我删除

free(round_key_GPU);
free(cipher_block_GPU);

它返回错误:

test.x: malloc.c:2842: mremap_chunk: Assertion `((size + offset) & (_rtld_global_ro._dl_pagesize - 1)) == 0' failed.

所以我认为可能在while循环完成之前已经分配了round_key_GPU和cipher_block_GPU指针来读取所有数据,然后realloc()覆盖了指针的内存空间。你怎么看?如果是这种情况,我怎么能从磁盘读取数据而不知道我必须读取多少数据?

(P.S.puint4是一个带有4个unsigned int的typedef结构,如uint4)

感谢! 达维德

0 个答案:

没有答案