我在回傳帶有函式引數的動態陣列指標時遇到問題。我遇到段錯誤
#include <stdio.h>
#include <stdlib.h>
void createArray(int *ptr, int n)
{
ptr = malloc(n * sizeof(int));
for(int i = 1; i <= n; i)
{
*(ptr (i - 1)) = i*i;
}
}
int main() {
int *array = NULL;
int n = 5;
createArray(array, n);
for(int i = 0; i < n; i)
{
printf("%d", array[i]);
}
return 0;
}
當我從 1 到 n 時,我必須用 i*i 填充我的陣列。我沒有收到任何錯誤或警告。只是關于分段錯誤的訊息。行程以退出代碼 139 結束(被信號 11 中斷:SIGSEGV)
uj5u.com熱心網友回復:
記憶體必須在呼叫函式中分配,但不能在被呼叫函式中分配。此變體有效:
#include <stdio.h>
#include <stdlib.h>
void createArray(int *ptr, int n){
int i;
for(i = 1; i <= n; i ) {
*(ptr (i - 1)) = i*i;
// fprintf(stdout,"%d %d\n", i, *(ptr (i -1)));fflush(stdout);
}
}
int main() {
int i, n, *array = NULL;
void *pvc;
n = 5;
array = (int *)malloc(n * sizeof(int));
createArray(array, n);
for(i = 0; i < n; i ) {
fprintf(stdout,"%d %d\n", i, array[i]);fflush(stdout);
}
pvc = (void *)array;
free(pvc);
return 0;
}
uj5u.com熱心網友回復:
您可以像這樣通過函式引數更改指標:
void createArray(int **ptr, int n)
{
*ptr = malloc(n * sizeof(int));
for(int i = 1; i <= n; i)
{
(*ptr)[i - 1] = i*i;
}
}
int main() {
int *array = NULL;
int n = 5;
createArray(&array, n);
記住這樣呼叫函式:createArray(array, n);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/537269.html
標籤:C指针
