gpt4 book ai didi

C - Malloc 导致程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:55 24 4
gpt4 key购买 nike

我正在编写这段 C 代码,它接收一个文件并从中读取值,该代码还没有执行任何操作,但这是我目前所做的。该程序在调用四个 malloc 的 block 中崩溃。如果我注释掉 y、f 和 yp,程序运行良好。我不知道是什么原因造成的。所以任何帮助将不胜感激。

注意:我正在使用 gcc 在 ubuntu 上对此进行测试。我确实尝试将 malloc 转换为“(float *)”,但我仍然遇到同样的错误。

int main( int argc, char *argv[])
{
FILE *rhs, *output;
int niter, n, i = 0, j = 0, k = 0, n1 = n + 1;

rhs = fopen(argv[1], "r");
// ab+ opens file for writting and creates the file if need be
output = fopen(argv[2], "ab+");
niter = atoi(argv[3]);

// check if files open up or not, if not exit.
if((rhs == NULL) || (output == NULL))
{
printf("Error Opening files.\n");
exit(1);
}

// read in N
fscanf(rhs, "%d", &n);

// THIS IS THE BLOCK CAUSING THE CRASH
// CODE WORKS WHEN I COMMENT OUT LINES AND ONLY LEAVE ONE OF THEM IN
// generate array to hold values from rhs file
float *numbers = malloc(sizeof(float) * ((n1)*(n1)));
float *y = malloc(sizeof(float) * ((n1)*(n1)));
float *f = malloc(sizeof(float) * ((n1)*(n1)));
float *yp = malloc(sizeof(float) * ((n1)*(n1)));

// get numbers and store into array
while(fscanf(rhs, "%f", &numbers[i]) != EOF)
{
printf("In while %f\n", numbers[i]);
i++;
}

fclose(rhs);

return 0;

最佳答案

一个问题是:

您正在使用 n 中的未初始化值初始化 n1:

int niter, n, i = 0, j = 0, k = 0, n1 = n + 1;
^
+-- "n" is not initialized here, might have any value.
thus, "n1" is also not initialized to a known value.

因此,您对 malloc 的调用很可能收到一个太大的值而根本无法分配。读完“n”后初始化“n1”:

// read in N
fscanf(rhs, "%d", &n);
n1 = n + 1;

无论如何,值得检查 malloc() 的返回值,看看它是否返回 NULL,以防无法分配内存。

关于C - Malloc 导致程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com