关于 C 中的转换的困惑

Confusion regarding a cast in C

我就是想问问有什么区别

int *a = (int *)malloc(sizeof(int))

int *a = malloc(sizeof(int))

因为在做项目的时候遇到过这种情况,就尝试创建一个数组作为指针,动态分配内存给它。但是当我使用 int * a = malloc(sizeof(int)) 时,我无法更改数组的任何值,导致分段错误,当我将其更改为 int * a =(int *)malloc(sizeof(int)) 时,一切都开始正常工作。 更准确地说,这是有问题的代码:

     int i = 0;
     for (i = 0; i < valCounter; i++) {
          if (strcmp(vars[i].name, name) == 0) {
               return 2;
          }
     }
     strcpy(vars[valCounter].name, name);
     strcpy(vars[valCounter].type, type);
     i--;
     vars[i].intArrayVal = (int *)malloc((dimension + 5) * sizeof(int)); 
     int j = 0;
     char currentNumber[1000];
     char elemente[1000];
     int *pointer;
     strcpy(elemente, elements);
     strcpy(currentNumber, strtok(elemente, ","));
     vars[i].intArrayVal[j++] = atoi(currentNumber);
     while (currentNumber != NULL && j <= i) {
          strcpy(currentNumber, strtok(NULL, ","));
          vars[i].intArrayVal[j++] = atoi(currentNumber);
     }
     valCounter++;
     return 0;

在这里,如果我使用的是没有演员表的版本,它无法正常工作,并且在我将演员表放在那里这一事实进行更改后,它开始按预期工作。

投与不投C语言没有区别。 如果出现错误,则表示您编译为 C++C++是完全不同的语言,不要使用C++编译器编译C代码

I could not change any of the values of the array, causing a segmentation fault

int *a = malloc(sizeof(int));

您仅为一个整数分配 space - 数组只有 一个 元素长。当您尝试访问 a[0] 以外的任何元素时,您正在访问无效的内存位置。

如果你想为更多的整数分配 space,你需要:

int *a = malloc(NUMBER_OF_INTEGERS * sizeof(int));

或更好

int *a = malloc(NUMBER_OF_INTEGERS * sizeof(*a));

使用 sizeof 中的对象而不是类型。如果更改对象的类型,则不必更改 sizeof 的所有外观。很容易遗漏一两个介绍很难调试和发现错误