C 语言中的动态一维数组不希望在其每个框中摄取文件的每个字符



在 C 语言中,我想在他的每个框中用文件的每个字符填充一个动态数组。 但是,当我打印我的数组时,我有:

0 = [] 
1 = [] 
2 = [] 
3 = [] 
4 = [] 
5 = [] 
6 = [] 
7 = [] 
8 = [] 
9 = []

我没有编译错误,但瓦尔格林德说我有一个:

Conditional jump or move depends on uninitialised value(s) 

在我的主要在printf。 这很奇怪,因为即使在我的主设备中进行了初始化:

array_valid_char = NULL;

瓦尔格林德不断给我这个错误。 即使我更改为:

printf("%d = [%d] n", i, array_valid_char[i]);

显示是相同的。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
int* f(char* name_file_in)
{
FILE *file_in;
int* array_valid_char = malloc(10 * sizeof(int*));
int read_char;
file_in = fopen(name_file_in,"rb");
if(file_in)
{
while ((read_char = fgetc(file_in)) != EOF)
{
*(array_valid_char++) = read_char;
}
}
if(file_in){fclose(file_in);}
return array_valid_char;
}
int main(int argc,char* argv[])
{
int *array_valid_char = malloc(10 * sizeof(int*));
array_valid_char = f(argv[1]);
for (int i = 0; i < 10; i++)
{
printf("%d = [%c] n", i, array_valid_char[i]);
}
return(0);
}

我的代码有什么问题?

您必须跟踪分配的内存的开头,而您没有。(应返回原始分配的块地址)。

int* array_valid_char = malloc(10 * sizeof(int*));
int *st = array_valid_char ;
...
return st;

你也有内存泄漏 - 你可以省略main()中的malloc

此外,当您完成处理后,您还需要释放动态分配的内存。

free(array_valid_char);

内存分配部分也将是

int* array_valid_char = malloc(10 * sizeof(int));

int* array_valid_char = malloc(10 * sizeof(*array_valid_char));

你想要int数组。

除其他要点外,检查malloc的返回值并正确处理它。

正确的编码方法是索引到分配的内存中,并检查我们是否达到了分配的限制 - 如果是,则重新分配。

我们中的许多人都认为sizeof( *ptr)*10 只够清晰的语法等,但知道sizeof返回size_t当将其与其他值相乘时,它不太可能溢出,因为相反(这是int算术)这是一个好处。(楚克斯)例如:sizeof(something)*int*int将导致具有size_t值的操作,该值不太可能溢出该int*int*sizeof(int)。在第二种情况下,int*int可能会溢出。(更有可能)

您的代码中存在一些问题:

使用*(array_valid_char++),每次通过循环时都会移动指针。如果要使用此方法,则需要使用其他变量跟踪数组的开头。您还可以使用迭代器array_valid_char[i],该迭代器从 0 开始,并在每个循环转弯时递增。

在你的主int *array_valid_char = malloc(10 * sizeof(int*));中,你错误地定位你的数组,但你用array_valid_char = f(argv[1]);覆盖它。如果在函数中错误地标记数组并将其发回并返回,则仍会分配内存。

在 printf 中,%d用于显示数字,%c用于显示字符。在您的情况下,您需要使用%c.在另一种情况下,您将看到字符的 ASCII 值。

顺便说一下,您还使用 int 数组来接收 char 数组。现在这不是问题,但对于某些优化,您可以使用 char 数组来占用更少的内存。

另外,当您不再使用它时,不要忘记free您使用的内存,它可能在更大的程序中很有用。

相关内容

  • 没有找到相关文章

最新更新