为什么错误realloc?错误中止(核心转储)

时间:2016-04-09 13:26:09

标签: c realloc coredump

 [TestClass]
    public class UnitTest1
    {
        [TestMethod()]
        public void TestMethod1()
        {
            // Arrange
            String expected = "text";

            //a ACT
            IWebDriver driver = new FirefoxDriver();
            driver.Navigate().GoToUrl("https://accounts.google.com/ServiceLogin?service=mail&continue=https://mail.google.com/mail/&hl=pl#identifier");
            driver.Manage().Window.Maximize();

            IWebElement email = driver.FindElement(By.XPath("//*[@id='Email']"));
            email.Clear();
            email.SendKeys("myemail");

            IWebElement buttonElement = driver.FindElement(By.XPath("//*[@id='next']"));
            buttonElement.Click();

            var wait1 = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(10));
            var password = wait1.Until(wd => wd.FindElement(By.XPath("//input[@id='Passwd']")));            
            password.Clear();
            password.SendKeys("mypassword");

            IWebElement login = driver.FindElement(By.XPath("//*[@id='signIn']"));
            login.Click();

            expected = driver.FindElement(By.ClassName("z0")).Text; //<-DOES'NT WORK


            // Assert
            Assert.IsTrue(expected.Contains("text"));

        }
    }
插入此序列后的

序列:235,225,2,2,2,365,11,2

它出现以下错误

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void print(int *iArray,int limit)
{

int counter=0;

while(counter<limit)
printf("%d ",iArray[counter++]);

printf("\n");
}

int main()

{

int counter=0;
int *iArray=NULL;
char str[5]="abc";
printf("Enter numbers :  ");

while(1){
scanf("%s",str);
if(strcmp(str,"s")==0) break;
iArray=realloc(iArray,counter+1);
iArray[counter++]=atoi(str);
}
print(iArray,counter);
return 0; 
}

3 个答案:

答案 0 :(得分:1)

改变这个:

iArray=realloc(iArray,counter+1);

到此:

iArray=realloc(iArray,(counter+1)*sizeof(*iArray));

因为您需要说要分配大小的空间。在您的代码中,您说分配counter + 1空间。 什么?现在,根据我的建议,您将counter + 1分配给iArray指向的地方(int),这更有意义,对吧? ;)

检查ref

  

更改ptr。

指向的内存块的大小      

该功能可以将存储块移动到新位置(其位置)   地址由函数返回。

     

内存块的内容保留到较小的内容   新旧尺寸,即使块移动到新位置。如果   新大小越大,新分配的值就越大   不确定的。

PS:下次格式化代码。

答案 1 :(得分:1)

看看realloc的原型:

void *realloc(void *ptr, size_t size);

它的第二个arg是size,以字节为单位,你要分配一个整数数组,你需要整个数组的大小,而不是元素的数量,而是使用它:

iArray=realloc(iArray, (counter+1) * sizeof(int));

答案 2 :(得分:0)

那是因为在每次迭代时,realloc()只分配比count的值多一个字节。即在第一次迭代中,您分配一个字节。但是你存储了atoi()的结果,它的大小是int