01/10/2018, 09:21

Chương trình bị stop working khi cấp phát bộ nhớ

E có làm chuơng trình kiểm tra dữ liệu nhập vào là số thực hay ko như sau :

[CODE]#include <stdio.h>
#include <math.h>
#include <malloc.h>
#include <string.h>
#include <ctype.h>
int validateFloat(char *s)
{
float a;
char b = (char)malloc(sizeof(char));
printf(“abc”);
if(sscanf(s, “%f”, &a) == 1)
{
char tmp = (char)malloc(sizeof(char));
sprintf(tmp, “%f”, a);
tmp = strtok(s, tmp);
strcpy(b, tmp);
while(*b)
{
if(!isspace(*b))
{
free(b);
free(tmp);
return 0;
}
b++;
}
free(b);
free(tmp);
return 1;
}
free(b);
return 0;
}

void inputFloat(float *n)
{
char s = (char)malloc(sizeof(char));
int valid = 0;
do
{
printf("Nhap n : ");
fgets(s, 50, stdin);
valid = validateFloat(s);
if(!valid)
{
printf(“Ban vua nhap ky tu khong phai so! ”);
}
}
while(!valid);
sscanf(s, “%f”, n);
}
int main()
{
float n;
inputFloat(&n);
}[/CODE]

E nhập vào số thực có phần thực 2 chữ số thì chuơng trình ktra được nhưng nhập 3 số trở lên là chuơng trình bị dừng. E thử thêm printf(“abc”); vào để ktra xem chuơng trình dừng chỗ nào thì thấy chuơng trình bị dừng chỗ cấp phát bộ nhớ cho b : char b = (char)malloc(sizeof(char));
Anh chị nào có thể chỉ hộ e tại sao chuơng trình lại bị sai chỗ đấy được ko ạ? E cảm ơn

Nguyễn Văn Nam viết 11:22 ngày 01/10/2018

Nhìn sơ qua thì e cấp phát thiếu bộ nhớ thôi =))~
sizeof(char) thì bằng 1 tức là e chỉ cấp phát bộ nhớ cho 1 ký tự. Nên nhập nhiều hơn 1 là chương trình chết @.@ thử cấp phát nhiều hơn xem ntn??
Ví dụ malloc(sizeof(char)*50);

Thanh Phong viết 11:31 ngày 01/10/2018

à ra vậy thanks a

Bài liên quan
0