【发布时间】:2013-02-18 16:59:50
【问题描述】:
当且仅当我尝试关闭文件时,我才会不断收到段错误:
FILE *outFilePtr = fopen(*(argv + 2), "w"); //open file, yes i'm sure it opens
fclose(outFilePtr); //sometime later in the program.
程序在没有 flcose() 的情况下从头到尾运行。有什么建议吗?
gdb 上的错误重定向到这里:假设它是一个声明了所有变量的函数。 gdb 也责怪我什至没有使用的 strtol 。
int t;
char line[50];
for (t = 0; t < lines; t++){
fgets(line, 50, filePtr);
strcpy(*string[t], strtok(line, " "));
*(num1 + t) = atoi(strtok(NULL, " "));
*(num2 + t) = atoi(strtok(NULL, " "));
}
内存分配函数
void dynamicArray(int** num1, int** num2, char*** str, int size)
{
int i = 0;
*(num1) = (int*)malloc(sizeof(int) * size);
*(num2) = (int*)malloc(sizeof(int) * size);
*(str) = (char**)malloc(sizeof(char*) * size);
for( i = 0; i < size; i++){
*(*(str) + i) = (char*)malloc(sizeof(char) *size);
}
return;
}
【问题讨论】:
-
您遗漏了中间发生的有趣部分。从您所展示的内容来看,不,它不应该崩溃。
-
你能给出 MWE(最小工作示例)吗?
-
这里有点跑题了:为什么所有这些都是
*(blah + x)而不是blah[x]? -
需要更多代码。您可以继续将代码精简为 MWE 吗?这种黑盒模型方法无法帮助我们帮助您。
-
别说了,太烦人了。显式 * 表示有经验的 C 代码阅读器正在发生一些“特殊”的事情。所以它需要“特别”注意。一个普通的数组下标,虽然在技术上是相同的,但完全显而易见,不会引发“特别”注意。希望我的解释不要太奇怪。