关于 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
的所有外观。很容易遗漏一两个介绍很难调试和发现错误
我就是想问问有什么区别
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
的所有外观。很容易遗漏一两个介绍很难调试和发现错误