C - 仅在Eclipse Debugger中获取malloc错误

时间:2016-11-11 22:01:22

标签: c linux eclipse malloc

所以,我必须创建一个接收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;

   }

0 个答案:

没有答案