Ciao,
avrei bisogno di un aiuto sul seguente pezzo di codice scritto in C

codice:
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdint.h>

typedef struct {
	char counterName[15];
	char bufferName[15];
	char resetName[15];
}historyParams;

#define OK		 	0
#define ERROR			-1
#define MAX_SIZE		2048

#define configureParams(historyParams) \
{ \
	strncpy(historyParams.counterName,"Nome Counter",sizeof(historyParams.counterName));  \
	strncpy(historyParams.bufferName,"Nome Buffer",sizeof(historyParams.bufferName));  \
	strncpy(historyParams.resetName,"Nome Reset",sizeof(historyParams.resetName));  \
}

int f(historyParams * histParams)
{
	historyParams * lscptr_histParams = NULL; 			
	size_t maxNByte = sizeof(historyParams)/sizeof(lscptr_histParams);
	size_t nStruct = MAX_SIZE/maxNByte;
	
	if(!histParams) //Funziona se puntatore e' NULL
	{
		printf("Input Parameter 'history_params' is NULL!");	/*Errore: puntatore e' NULL*/
		return ERROR;
	}

	unsigned int i = 0;

	do {
		lscptr_histParams = histParams;

		memcpy(lscptr_histParams[i].bufferName, histParams->bufferName, sizeof(histParams->bufferName));
		printf("lscptr_histParams[%d].bufferName = %s\n\n",i,lscptr_histParams[i].bufferName);
		
		i++;
		memset(&lscptr_histParams[i], '\0', sizeof(historyParams));
		printf("i = %d\n",i);

		if(i==nStruct)
		{
			break;
		}
		lscptr_histParams++;

	} while(lscptr_histParams);

	return OK;
}

int main() {

	int esito = 0;

	historyParams * lHistParams = NULL;
	historyParams varHistParams;
	configureParams(varHistParams);
	lHistParams = &varHistParams;

	esito = f(lHistParams);
	if(esito == 0)
	{
		printf("!!!Hello World!!!\n");
	}

	return 0;
}
In dettaglio, al momento dell'esecuzione in alcuni casi essa termina senza alcun problema, in altri si interrompe. Purtroppo non riesco a capirne quando il motivo? Qualcuno potrebbe cortesemente dargli un'occhiata ed aiutarmi. Grazie :-)