uninitialized float pointer (c++) : > so basically, I have this pointer in a struct, and it is used to fill the values of an array. it works as it should, but the visual studio keeps giving the same warning, saying that is uninitialized, and it's a NULL pointer, when it isn't. Can anyone explain/help?


    struct Sinal {
    	int freq_amostra=0;
    	int quant_amos_recol=0;
    	float *val_amos;
    };
    void p() { system("pause"); };
    Sinal lerficheiro();
    
    int main()
    {
    	Sinal amostra;
    	Sinal saida_rmo;
    	Sinal saida_roc;
    	Sinal saida_frc;
    		
    	int i,n;
    	int opc_1, opc_2;
    
    	char menu[6][50] = {{"Abrir ficheiro de amostras             "},{"Aplicar retifica‡„o de meia onda       "},{"Aplicar retifica‡„o de onda completa   "},{"Aplicar filtro RC                      "},{"Guardar ficheiro de resultados         "},{" Sair do programa                       "} };
    	
    	do {
    		system("cls");
    		printf("\t");
    		printf("%c", 201);
    		{
    			for (i = 0; i < 11; i++)
    			{
    				printf("%c", 205);
    			}
    			printf("%c \n", 187);
    			printf("\t");
    			printf("%c", 186);
    			printf("   Menu    ");
    			printf("%c \n", 186);
    			printf("\t");
    			printf("%c", 200);
    		}
    		for (i = 0; i < 11; i++)
    		{
    			printf("%c", 205);
    		}
    		printf("%c", 188);
    		printf("\n");
    		printf("%c", 201);
    		for (i = 0; i < 3; i++)
    		{
    			printf("%c", 205);
    		}
    		printf("%c", 203);
    		for (i = 0; i < 40; i++)
    		{
    			printf("%c", 205);
    		}
    		printf("%c \n", 187);
    		for (n= 0; n < 6; n++)
    		{
    			if (n == 5)
    			{
    				printf("%c", 186);
    				printf(" %d %c", n + 1, 186);
    				printf("%s", menu[0, n]);
    				printf("%c\n", 186);
    			}
    			else
    			{
    				printf("%c", 186);
    				printf(" %d %c %s", n + 1, 186, menu[0, n]);
    				printf("%c \n", 186);
    				printf("%c", 204);
    				for (i = 0; i < 3; i++)
    				{
    					printf("%c", 205);
    				}
    				printf("%c", 206);
    				for (i = 0; i < 40; i++)
    				{
    					printf("%c", 205);
    				}
    				printf("%c \n", 185);
    			}
    		}
    		printf("%c", 200);
    		for (i = 0; i < 3; i++)
    		{
    			printf("%c", 205);
    		}
    		printf("%c", 202);
    		for (i = 0; i < 40; i++)
    		{
    			printf("%c", 205);
    		}
    		printf("%c \n", 188);
    		printf(" \n\n\n");
    		scanf_s("%d", &opc_1);
    		printf(" \n\n");
    		switch (opc_1)
    		{
    		case 1:   // ler ficheiro
    		{
    			amostra=lerficheiro();
    			
    			printf(" \n");
    			break;
    		}
    		case 2:    //retificação de meia onda
    		{ if (amostra.freq_amostra == NULL || amostra.quant_amos_recol == NULL)
    		{
    			printf("Deve escolher primeiro a op‡„o 1!\n");
    		}
    		else
    		{
    			saida_rmo.freq_amostra = amostra.freq_amostra;
    			saida_rmo.quant_amos_recol = amostra.quant_amos_recol;
    			saida_rmo.val_amos = (float*)malloc(amostra.quant_amos_recol * sizeof(float));
    
    			for (int i = 0; i < amostra.quant_amos_recol; i++)
    			{
    				if (amostra.val_amos[i] > 0)
    				{
    					saida_rmo.val_amos[i] = amostra.val_amos[i];
    				}
    				else
    				{
    					saida_rmo.val_amos[i] = 0;
    				}
    			}
    		}
    		break;
    		}
    		case 3:  // retificação de onda completa 
    		{if (amostra.freq_amostra == NULL || amostra.quant_amos_recol == NULL)
    		{
    			printf("Deve escolher primeiro a op‡„o 1!\n");
    		}
    		else
    		{
    			saida_roc.freq_amostra = amostra.freq_amostra;
    			saida_roc.quant_amos_recol = amostra.quant_amos_recol;
    			saida_roc.val_amos = (float*)malloc(amostra.quant_amos_recol * sizeof(float));
    
    			for (i = 0; i < amostra.quant_amos_recol; i++)
    			{
    				if (amostra.val_amos[i] >= 0)
    				{
    					saida_roc.val_amos[i] = amostra.val_amos[i];
    				}
    				else if (amostra.val_amos[i] < 0)
    				{
    					saida_roc.val_amos[i] = -amostra.val_amos[i];
    				}
    			}
    		}
    		break;
    		}
    		case 4:   // aplicação de filtro RC
    		{if (amostra.freq_amostra == NULL || amostra.quant_amos_recol == NULL)
    		{
    			printf("Deve escolher primeiro a op‡„o 1!\n");
    		}
    		else
    		{
    			float res;
    			float cond;
    			double constante;
    			double K1 = 0, K2 = 0;
    
    			saida_frc.freq_amostra = amostra.freq_amostra;
    			saida_frc.quant_amos_recol = amostra.quant_amos_recol;
    			saida_frc.val_amos = (float*)malloc(amostra.quant_amos_recol * sizeof(float));
    			constante = 1.0/ saida_frc.freq_amostra;
    
    			do {
    				printf("\nIndique o valor de resistencia:");
    				scanf_s("%f", &res);
    				printf("\nIndique o valor do condensador:");
    				scanf_s("%f", &cond);
    			} while (res== 0 || cond == 0);
    
    			double frac_res_cond = (1.0/res)*(1.0/cond);
    
    			for (int i = 1; i < amostra.quant_amos_recol; i++)
    			{
    				//K1 = (float)(frac_res_cond *((amostra.val_amos[i - 1]) - (saida_frc.val_amos[i - 1])));
    				K1 = frac_res_cond *amostra.val_amos[i - 1] - frac_res_cond * saida_frc.val_amos[i - 1];
    				//K2 = (float)(frac_res_cond *(amostra.val_amos[i] - saida_frc.val_amos[i - 1] + (K1 * constante)));
    				K2 = frac_res_cond * amostra.val_amos[i] - frac_res_cond * saida_frc.val_amos[i - 1] + frac_res_cond * (K1 * constante);
    				saida_frc.val_amos[i] = (saida_frc.val_amos[i - 1] + (constante*K1 + constante*K2) / 2);
    			}
    		}
    		break;
    		}
    		case 5:   // guardar ficheiro
    		{if (amostra.freq_amostra == NULL || amostra.quant_amos_recol == NULL)
    		{
    			printf("Deve escolher primeiro a op‡„o 1!\n");
    		}
    		else
    		{
    			FILE* fich_save;
    		    float* freq;
    			char nome_fich_guardar[50];
    			nome_fich_guardar[0] = '\0';
    			char nome[30];
    			char menu2[][50] = { { "Ficheiro de retifica‡„o de meia onda     "},{"Ficheiro de retifica‡„o de onda completa "},{ "Ficheiro de aplica‡„o de filtro RC        "}};
    
    			do {
    				printf("Nome do ficheiro a guardar: \n");
    				scanf_s(" %s", nome_fich_guardar, 50);
    			} while (strlen(nome_fich_guardar) < 1);
    
    			strcpy(nome, nome_fich_guardar);
    			strcat(nome, ".csv");
    			printf("\n %s \n", nome);
    			fich_save = fopen(nome, "w");
    
    			freq = (float*)malloc(amostra.quant_amos_recol * sizeof(float));
    			freq[0] = (0.0 / amostra.freq_amostra);
    			for (int i = 1; i < amostra.quant_amos_recol; i++)
    			{
    				freq[i] = (1.0 / amostra.freq_amostra) + (freq[i - 1]);
    			}
    
    			do {
    				system("cls");
    				do {
    					printf("\t");
    					printf("%c", 201);
    					{
    						for (i = 0; i < 32; i++)
    						{
    							printf("%c", 205);
    						}
    						printf("%c \n", 187);
    						printf("\t");
    						printf("%c", 186);
    						printf(" Que ficheiro pretende guardar? ");
    						printf("%c \n", 186);
    						printf("\t");
    						printf("%c", 200);
    					}
    					for (i = 0; i < 32; i++)
    					{
    						printf("%c", 205);
    					}
    					printf("%c", 188);
    					printf("\n");
    					printf("%c", 201);
    					for (i = 0; i <3; i++)
    					{
    						printf("%c", 205);
    					}
    					printf("%c", 203);
    					for (i = 0; i < 42; i++)
    					{
    						printf("%c", 205);
    					}
    					printf("%c \n", 187);
    					for (n = 0; n < 3; n++)
    					{
    						if (n == 2)
    						{
    							printf("%c", 186);
    							printf(" %d %c", n + 1, 186);
    							printf("%s", menu2[0, n]);
    							printf("%c\n", 186);
    						}
    						else
    						{
    							printf("%c", 186);
    							printf(" %d %c %s", n + 1, 186, menu2[0, n]);
    							printf("%c \n", 186);
    							printf("%c", 204);
    							for (i = 0; i < 3; i++)
    							{
    								printf("%c", 205);
    							}
    							printf("%c", 206);
    							for (i = 0; i < 42; i++)
    							{
    								printf("%c", 205);
    							}
    							printf("%c \n", 185);
    						}
    					}
    					printf("%c", 200);
    					for (i = 0; i < 3; i++)
    					{
    						printf("%c", 205);
    					}
    					printf("%c", 202);
    					for (i = 0; i < 42; i++)
    					{
    						printf("%c", 205);
    					}
    					printf("%c \n", 188);
    					printf(" \n\n\n");
    					scanf_s(" %d", &opc_2);
    
    				} while (opc_2 < 1 || 3 < opc_2);
    				switch (opc_2)
    				{
    				case 1: {
    					if (amostra.freq_amostra == NULL || amostra.quant_amos_recol == NULL)
    					{
    						printf("Deve escolher primeiro a op‡„o 2!\n");
    						p();
    					}
    					else
    					{
    						if (amostra.quant_amos_recol == saida_rmo.quant_amos_recol)
    						{
    							for (i = 0; i < amostra.quant_amos_recol; i++)
    							{
    								fprintf(fich_save, " %.8f; %.8f; %.8f\n", freq[i], amostra.val_amos[i], saida_rmo.val_amos[i]);
    							}
    						}
    						else { exit(1); }
    					}
    					break;
    				}
    				case 2: {
    					if (amostra.freq_amostra == NULL || amostra.quant_amos_recol == NULL)
    					{
    						printf("Deve escolher primeiro a op‡„o 3!\n");
    						p();
    					}
    					else
    					{
    						if (amostra.quant_amos_recol == saida_roc.quant_amos_recol)
    						{
    							for (i = 0; i < amostra.quant_amos_recol; i++)
    							{
    								fprintf(fich_save, " %.8f; %.8f; %.8f\n", freq[i], amostra.val_amos[i], saida_roc.val_amos[i]);
    							}
    						}
    						else { exit(1); }
    					}
    					break;
    				}
    				case 3: {
    					if (amostra.freq_amostra == NULL || amostra.quant_amos_recol == NULL)
    					{
    						printf("Deve escolher primeiro a op‡„o 4!\n");
    						p();
    					}
    					else
    					{
    						if (amostra.quant_amos_recol == saida_frc.quant_amos_recol)
    						{
    							for (i = 0; i < amostra.quant_amos_recol; i++)
    							{
    								fprintf(fich_save, " %.8f; %.8f; %.8f\n", freq[i], amostra.val_amos[i], saida_frc.val_amos[i]);
    							}
    						}
    						else { exit(1); }
    					}
    					break;
    				}
    				}
    			} while (opc_2 < 1 || 4 < opc_2);
    
    			fclose(fich_save);
    			printf("\n");
    		}
    		break;
    		}
    		case 6:
    		{
    			exit(1);
    			break;
    		}
    		}
    	} while (1);
    }
    Sinal lerficheiro()
    {    
    	Sinal amostra;
    	char local_fichlet[50];
    	local_fichlet[0] = '\0';
    	FILE* fichleitura;
    	do {
    		do {
    			printf("Nome/localiza%c%co do ficheiro: ", 135, 132);
    			scanf_s("%s", local_fichlet, 50);
    
    		} while (strlen(local_fichlet) < 5);
    		fichleitura = fopen(local_fichlet, "r");
    		if (fichleitura == NULL)
    		{
    			printf("Erro ao abrir o ficheiro: %s \n", local_fichlet);
    			system("pause");
    		}
    	} while (fichleitura == NULL);
    
    	fscanf_s(fichleitura, "%d", &amostra.freq_amostra);
    	fscanf_s(fichleitura, "%d", &amostra.quant_amos_recol);
    
    	amostra.val_amos = (float*)malloc(amostra.quant_amos_recol*sizeof(float));
    
    	for (int i = 0; i < amostra.quant_amos_recol; i++)
    	{
    		fscanf_s(fichleitura, "%f", &amostra.val_amos[i]);
    	}
    	fclose(fichleitura);
    	return amostra;
    }

> C26495	Variable 'Sinal::val_amos' is uninitialized. Always initialize a member variable (type.6).	


