我一直在寻找类似性质的其他答案,但仍然遇到问题。如何调整整数数组?
我是C初学者,需要一些建议。
相关的代码部分:
int readNumbers(int **array, char* fname, int hexFlag) {
int numberRead = 0;
FILE* fp;
int counter = 0;
char arr[100];
char* ptr;
array = malloc(0 * sizeof(*array)); //Problematic area. Should I initially give it space?
fp = fopen(fname, "r");
if (fp == NULL) {
printf("Error opening file\n");
return -1;
}
while (fgets(arr, sizeof(arr), fp)) {
ptr = strtok(arr, " \n");
while(ptr) {
if (hexFlag == 0) {
array = realloc(array, (counter + 1) * sizeof(int*));
array[counter++] = strtol(ptr , NULL , 10); //Seg Faulting
} else {
array = realloc(array, (counter + 1) * sizeof(int*));
array[counter++] = strtol(ptr, NULL, 16);
}
++numberRead;
ptr = strtok(NULL , " \n");
}
}
我调试这一点,似乎阵列永远不会分配给它的内存。另外,在我试图通过array[counter++]
访问数组后,程序段出错。
我也发现在每次增量后重新分配是不好的做法,但我不知道还有什么要做。
你好,我在几年前停止了C,但此行:阵列=的malloc(0 *的sizeof(*阵列));将始终分配PointerSize字节。你的数组实际上是指向指针,所以*数组只是一个指针。编辑,btw:0 * XX = 0,所以你没有分配任何内存 – Jurion 2014-11-02 03:11:47
阅读这个问题http://stackoverflow.com/questions/2937409/resizing-an-array-with-c! – Blackhat002 2014-11-02 03:22:34
@ Blackhat002嗨,我已经非常广泛地看到了这个问题。尽管我可能错过了一个重要的细节。我尝试了各种方法,但它们要么有无效的指针,要么有分段错误。 – Ansdai 2014-11-02 03:25:12