Hel*_*PLs 0 c malloc pointers casting
我只是想问一下有什么区别
int *a = (int *)malloc(sizeof(int))
Run Code Online (Sandbox Code Playgroud)
和
int *a = malloc(sizeof(int))
Run Code Online (Sandbox Code Playgroud)
因为我在做项目时遇到了这种情况,我尝试创建一个数组作为指针,并动态为其分配内存。但是当我使用时,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;
Run Code Online (Sandbox Code Playgroud)
在这里,如果我使用没有演员的版本,它就无法正常工作,并且在更改了我将演员放在那里的事实后,它开始按预期工作。
C施法与否,语言没有区别。如果出现错误,则意味着您编译为C++. C++是一种完全不同的语言,不使用C++编译器来编译C代码
我无法更改数组的任何值,导致分段错误
int *a = malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)
您仅为一个整数分配空间 - 数组只有一个元素长。当您尝试访问除a[0]您访问无效内存位置之外的任何元素时。
如果您想为更多整数分配空间,您需要:
int *a = malloc(NUMBER_OF_INTEGERS * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
或更好
int *a = malloc(NUMBER_OF_INTEGERS * sizeof(*a));
Run Code Online (Sandbox Code Playgroud)
在 s 中使用对象sizeof而不是类型。如果更改对象的类型,则不必更改sizeof. 很容易错过一两个引入很难调试和发现错误