【发布时间】:2014-09-17 11:19:54
【问题描述】:
好吧,在此之前我搜索了很多关于“导致分段错误的原因”,但我没有找到任何关于我的情况的信息。
事情是这样的:
DNA_INIT Creation::InitalizeUserActivity()
{
SUData *curr = new SUData[__USERCOUNT];
readSQL(curr,__USERCOUNT);
// return something
}
我在 dna.h 中有这个函数,这是它的文件,名为 dna.cpp
SUData *readSQL(SUData *tmp,int size)
{
ifstream getSQL;
getSQL.open("../noSQL/StoredUserDataNoSQL.inc");
int count;
string tmpstr;
ifstream focus;
focus.open("../instruction.bin",ios::app);
focus >> tmpstr >> count;
focus.close();
int c = 0;
tmp = new SUData[size];
while(getSQL >> tmp[c].id >> tmp[c].access >> tmp[c].u_name >>
tmp[c].u_surname >> tmp[c].u_username >> tmp[c].u_password
>> tmp[c].u_email )
{
c++;
}
return tmp;
}
当我尝试执行时,它给了我分段错误。我试过了,但还是一样。感谢您的建议。
编辑:我删除了 tmp = new SUData[size];但还是一样
【问题讨论】:
-
__USERCOUNT有多大?你确定够了吗?您的问题是“关于分配” - 哪一行导致了问题? -
为什么要在 append 模式下打开 input 流?另外,按照它的名字(
../instruction.bin),它是一个二进制文件,所以也许你应该以二进制模式打开它? -
至于你的问题,每当你的程序崩溃时,你应该在调试器中运行它的调试版本。调试器将在崩溃的位置停止,还可以让您检查并向上走函数调用堆栈,还可以让您检查变量的值。请在调试器中运行您的程序,并告诉我们它在哪里崩溃了。
-
还有一件事要考虑,如果
../noSQL/StoredUserDataNoSQL.inc文件中的数据多于变量size所指示的数据怎么办?然后,您将在为tmp分配的内存之外写入,这导致undefined behavior。你可能应该有例如while (c < size && getSQL >> ...) -
@doctorlove 它只有 4 个
标签: c++ memory-management allocation