我很难理解这种行为,所以也许有人可以对这种情况有所了解。我根本想不通为什么我不能从一个方法返回一个指向结构的指针,并期望之后仍然能够重用它。
如您所见,该generateSmallMatrix()
方法创建了一个 int[] 数组并将其设置在 ysmf 结构中,然后我将其返回给 main。然后 Main 获取 ysmf* 并调用 printArray(再次)。在第三次尝试时,无法再检索阵列了..这让我发疯了..
我已经用我的 Eclipse 调试器检查了所有调用的位置matrix->A
是相同的(0x7ffffffffe180 - 所以就我所知的 C 指针,任何形式的访问该 int 都应该返回正确的值 - 无论是 *(ax++) 还是 ax[i] ) .. 但也没有..
至少可以说非常令人沮丧,所以这里是代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct sparseMatrix
{
int* A;
} ysmf;
void printArray(int* ax, int length) {
int i = 0;
for (i = 0; i < length; i++) {
printf("%i,", ax[i]);
}
printf("\n");
}
ysmf* generateSmallMatrix()
{
ysmf *matrix = malloc(sizeof(ysmf));
int a[] = {1,2,3,9,1,4};
printArray(a, 6); // returns 1,2,3,9,1,4,
matrix->A = a;
printArray(matrix->A, 6); //returns 1,2,3,9,1,4,
//printArray(matrix->A, 6);
return matrix;
}
int main(void) {
ysmf* matrix = generateSmallMatrix();
printArray(matrix->A, 6); //returns 1,6,-7856,32767,1,4,
return EXIT_SUCCESS;
}
您可以在我插入评论的地方看到问题。
我知道这可能是我不应该错过的完全基本的东西..