我只是想問有什么區別
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;
在這里,如果我使用沒有演員表的版本,它就無法正常作業,并且在更改了我將演員表放在那里的事實之后,它開始按預期作業。
uj5u.com熱心網友回復:
無論C您是否投射,語言都沒有區別。如果出現錯誤,則意味著您編譯為C . C 是一種完全不同的語言,不使用C 編譯器來編譯C代碼
我無法更改陣列的任何值,導致分段錯誤
int *a = malloc(sizeof(int));
你只為一個整數分配空間——陣列只有一個元素長。當您嘗試訪問除a[0]訪問無效記憶體位置之外的任何元素時。
如果要為更多整數分配空間,則需要:
int *a = malloc(NUMBER_OF_INTEGERS * sizeof(int));
或更好
int *a = malloc(NUMBER_OF_INTEGERS * sizeof(*a));
在sizeofs 中使用物件而不是型別。如果您更改物件的型別,您將不必更改sizeof. 很容易錯過一兩個介紹很難除錯和發現錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/402632.html
標籤:
