所以,我必须创建一个接收unsigned char *的函数,将其转换为char *,然后返回结果。
char *getFileName(unsigned char *nombreArchivo){
int i = 0;
char *nombre;
while(nombreArchivo[i] != '\0' && i <= 17){
i++;
}
size_t tamanio = i + 1;
nombre = malloc(tamanio); // THE FUNCTION DIES HERE
memcpy(nombre, nombreArchivo, tamanio);
return nombre;
}
我有几个问题:1)函数在for()内部被调用,但它在开始时不会崩溃。实际上,循环在崩溃之前会迭代几次。
2)这次崩溃只发生在我在eclipse调试器上运行代码时。如果我在Linux终端上运行它,它将正常工作,没有问题。
3)崩溃大部分时间都发生在相同数量的循环中。我的第一个猜测是问题与调试器的可用内存有关。我增加了内存,但它在相同数量的循环中不断崩溃。
任何线索?
编辑:忘了提,但每次再次调用函数时,变量nombre仍然具有上一次迭代的返回值。事情是,如果我尝试对存储getFileName()的返回值的变量执行free(),程序也会在那里崩溃。以下是调用函数的代码:
char *osada_readdir(char *unaRuta){
char *contenido = string_new();
char *nombreArchivo = string_new();
char *separador = ";";
int parentBlock = buscarArchivo(unaRuta);
int i;
if(parentBlock == 999999){
printf("there is no such directory/subdirectory\n");
exit(0);
}
for (i = 0; i <= 2048; i++){
if(miDisco.tablaDeArchivos[i].parent_directory == parentBlock){
nombreArchivo = getFileName(miDisco.tablaDeArchivos[i].fname); // I verified that the .fname field is being read properly
if(strlen(nombreArchivo) > 0){
contenido = concat(contenido, nombreArchivo);
contenido = concat(contenido, separador);
//
}
}
}
//free(nombreArchivo); // if i dont comment this, program crashes aswell.
return contenido;
}