提问人:Δημήτρης Μπακίρης 提问时间:10/17/2023 更新时间:10/17/2023 访问量:85
无法从我的 main 访问函数中使用 malloc 分配的内存
Cannot access memory allocated with malloc in a function from my main
问:
据我所知,在函数中使用 malloc 分配内存允许您在 main 中使用该内存,直到您手动释放它。我有一个函数,可以读取MNISTI图像文件,并以整数数组的形式为每个图像创建一个向量。代码如下:
int* readNextMNISTImage(const char* file_path) {
static int current_image = 0;
FILE* file = fopen(file_path, "rb");
if (file == NULL) {
fprintf(stderr, "Error opening file: %s\n", file_path);
return NULL;
}
fseek(file, 16 + IMAGE_SIZE * current_image, SEEK_SET);
int* vector = (int*)malloc(IMAGE_SIZE * sizeof(int));
if (vector == NULL) {
fprintf(stderr, "Error allocating memory for image vector.\n");
fclose(file);
return NULL;
}
for (int j = 0; j < IMAGE_SIZE; ++j) {
uint8_t pixel;
size_t bytesRead = fread(&pixel, sizeof(uint8_t), 1, file);
if (bytesRead != 1) {
fprintf(stderr, "Error reading pixel data.\n");
free(vector);
fclose(file);
return NULL;
}
vector[j] = (int)pixel; // Store pixel value as an integer
}
for (int i=0;i<IMAGE_SIZE;i++)
printf("%d ", vector[i]);
fclose(file);
current_image++;
return vector;
}
如果我在这个函数中添加一个 for 循环来打印向量数组的内容,我可以看到它完全按照我想要的方式创建。取值介于 0 到 255 之间的字节数组。一切都很好。我在我的主函数中返回指向该数组的指针,并尝试以相同的方式打印它,以便我可以看到它是否可用,并且我得到一个 seg 错误。我想这是非常基本的东西,但我无法弄清楚为什么。这是我的主要:
int main() {
char file_path[256];
printf("Enter the path to the dataset file: ");
scanf("%s", file_path);
int* vector = readNextMNISTImage(file_path);
for (int i = 0; i < IMAGE_SIZE; i++)
printf("%d ", vector[i]);
free(vector);
return 0;
}
答:
0赞
Δημήτρης Μπακίρης
10/17/2023
#1
解决。我在我的 .h 文件中的函数声明中缺少一个字母......我想如果是这样的话,程序就不会编译了。对不起,给大家添麻烦了
评论
0赞
pmg
10/17/2023
打开所有编译器警告,包括说您正在调用范围内没有原型的函数的警告:-)否则编译器假定函数返回 int ...在你的情况下,与.-- 见 gcc.gnu.org/onlinedocs/gcc/...int
int *
评论
#include <stdlib.h>